首页 > 解决方案 > 仅警告一次:UITableView 被告知布局其可见单元格和其他内容而不在视图层次结构中?

问题描述

我在 viewController 上添加了 tableView。当我打开此屏幕时,我将收到以下警告一次。

[TableView] 仅警告一次:UITableView 被告知布局其可见单元格和其他内容而不位于视图层次结构中(表视图或其超级视图之一尚未添加到窗口中)。这可能会通过强制表视图中的视图在没有准确信息的情况下加载和执行布局(例如表视图边界、特征集合、布局边距、安全区域插入等)而导致错误,并且还会由于额外的布局传递而导致不必要的性能开销. 在 UITableViewAlertForLayoutOutsideViewHierarchy 处创建一个符号断点,以便在调试器中捕获它并查看导致这种情况发生的原因,因此如果可能的话,您可以完全避免此操作,或者将其推迟到表格视图添加到窗口中。表格视图:<UITableView: 0x7fe2ba8d5a00; 帧 = (-47 -80; 394 553); clipsToBounds = YES; 自动调整大小 = RM+BM;手势识别器 = <NSArray: 0x600003447480>; 层 = <CALayer: 0x600003aa2be0>; 内容偏移:{0, 0}; 内容大小:{394, 176};调整内容插入:{0, 0, 0, 0}; 数据源:<Project.MondayToSundayViewController:0x7fe2b9da05c0>>

为 UITableViewAlertForLayoutOutsideViewHierarchy 添加符号断点后,控制台中将显示以下内容。

> UIKitCore`UITableViewAlertForLayoutOutsideViewHierarchy:
->  0x7fff48260c7e <+0>:   pushq  %rbp
    0x7fff48260c7f <+1>:   movq   %rsp, %rbp
    0x7fff48260c82 <+4>:   pushq  %r14
    0x7fff48260c84 <+6>:   pushq  %rbx
    0x7fff48260c85 <+7>:   subq   $0x30, %rsp
    0x7fff48260c89 <+11>:  callq  *0x3e51a6a1(%rip)         ; (void *)0x00007fff51411350: objc_retain
    0x7fff48260c8f <+17>:  movq   %rax, %rbx
    0x7fff48260c92 <+20>:  leaq   0x416a8dbf(%rip), %rdi    ; _UIInternalPreference_UITableViewEnableAlertForLayoutOutsideViewHierarchy
    0x7fff48260c99 <+27>:  leaq   0x3e5a2140(%rip), %rsi    ; @"UITableViewEnableAlertForLayoutOutsideViewHierarchy"
    0x7fff48260ca0 <+34>:  callq  0x7fff482a7529            ; _UIInternalPreferenceUsesDefault
    0x7fff48260ca5 <+39>:  testb  %al, %al
    0x7fff48260ca7 <+41>:  jne    0x7fff48260cb3            ; <+53>
    0x7fff48260ca9 <+43>:  movb   0x416a8dad(%rip), %al     ; _UIInternalPreference_UITableViewEnableAlertForLayoutOutsideViewHierarchy + 4
    0x7fff48260caf <+49>:  andb   $0x1, %al
    0x7fff48260cb1 <+51>:  je     0x7fff48260d2d            ; <+175>
    0x7fff48260cb3 <+53>:  leaq   0x416c3ffe(%rip), %rax    ; _UIApplicationLinkedOnVersion
    0x7fff48260cba <+60>:  movl   (%rax), %eax
    0x7fff48260cbc <+62>:  testl  %eax, %eax
    0x7fff48260cbe <+64>:  je     0x7fff48260d3e            ; <+192>
    0x7fff48260cc0 <+66>:  cmpl   $0xd0000, %eax            ; imm = 0xD0000 
    0x7fff48260cc5 <+71>:  jb     0x7fff48260d2d            ; <+175>
    0x7fff48260cc7 <+73>:  movq   %rbx, %rdi
    0x7fff48260cca <+76>:  callq  0x7fff486252fa            ; symbol stub for: objc_opt_class
    0x7fff48260ccf <+81>:  movq   0x41607402(%rip), %rsi    ; "_isInternalTableView"
    0x7fff48260cd6 <+88>:  movq   %rax, %rdi
    0x7fff48260cd9 <+91>:  callq  *0x3e51a641(%rip)         ; (void *)0x00007fff513f7780: objc_msgSend
    0x7fff48260cdf <+97>:  testb  %al, %al
    0x7fff48260ce1 <+99>:  jne    0x7fff48260d2d            ; <+175>
    0x7fff48260ce3 <+101>: movq   0x3e519b46(%rip), %rax    ; (void *)0x00007fff89ea06a0: _NSConcreteStackBlock
    0x7fff48260cea <+108>: movq   %rax, -0x38(%rbp)
    0x7fff48260cee <+112>: movl   $0xc2000000, %eax         ; imm = 0xC2000000 
    0x7fff48260cf3 <+117>: movq   %rax, -0x30(%rbp)
    0x7fff48260cf7 <+121>: leaq   0x46728(%rip), %rax       ; __UITableViewAlertForLayoutOutsideViewHierarchy_block_invoke
    0x7fff48260cfe <+128>: movq   %rax, -0x28(%rbp)
    0x7fff48260d02 <+132>: leaq   0x3e51d237(%rip), %rax    ; __block_descriptor_40_e8_32s_e5_v8?0l
    0x7fff48260d09 <+139>: movq   %rax, -0x20(%rbp)
    0x7fff48260d0d <+143>: movq   %rbx, %rdi
    0x7fff48260d10 <+146>: callq  *0x3e51a61a(%rip)         ; (void *)0x00007fff51411350: objc_retain
    0x7fff48260d16 <+152>: movq   %rax, -0x18(%rbp)
    0x7fff48260d1a <+156>: cmpq   $-0x1, 0x416ca5c6(%rip)   ; _UIInternalPreference_TableViewReorderingUsesDragAndDrop_block_invoke_10.__s_category + 7
    0x7fff48260d22 <+164>: jne    0x7fff48260d52            ; <+212>
    0x7fff48260d24 <+166>: movq   %rax, %rdi
    0x7fff48260d27 <+169>: callq  *0x3e51a5fb(%rip)         ; (void *)0x00007fff51411000: objc_release
    0x7fff48260d2d <+175>: movq   %rbx, %rdi
    0x7fff48260d30 <+178>: addq   $0x30, %rsp
    0x7fff48260d34 <+182>: popq   %rbx
    0x7fff48260d35 <+183>: popq   %r14
    0x7fff48260d37 <+185>: popq   %rbp
    0x7fff48260d38 <+186>: jmpq   *0x3e51a5ea(%rip)         ; (void *)0x00007fff51411000: objc_release
    0x7fff48260d3e <+192>: movl   $0xd0000, %edi            ; imm = 0xD0000 
    0x7fff48260d43 <+197>: callq  0x7fff48093724            ; _UIApplicationLinkedOnOrAfter
    0x7fff48260d48 <+202>: testb  %al, %al
    0x7fff48260d4a <+204>: jne    0x7fff48260cc7            ; <+73>
    0x7fff48260d50 <+210>: jmp    0x7fff48260d2d            ; <+175>
    0x7fff48260d52 <+212>: leaq   0x416ca58f(%rip), %rdi    ; UITableViewAlertForLayoutOutsideViewHierarchy.once
    0x7fff48260d59 <+219>: leaq   -0x38(%rbp), %r14
    0x7fff48260d5d <+223>: movq   %r14, %rsi
    0x7fff48260d60 <+226>: callq  0x7fff48624f8e            ; symbol stub for: dispatch_once
    0x7fff48260d65 <+231>: movq   0x20(%r14), %rax
    0x7fff48260d69 <+235>: jmp    0x7fff48260d24            ; <+166>

你能帮我删除警告吗?

标签: iosswiftuitableview

解决方案


在将视图添加到视图层次结构之前添加了约束。这就是您收到此错误的原因。确保轮流添加,例如:

view.addSubview(tableView) // 1
// 2 and start adding constraints..
tableView.translatesAutoresizingMaskIntoConstraints = false
...

推荐阅读