Ios &引用;此NSLayoutConstraint配置的常量超过了内部限制;
在尝试调试自动布局问题时(在某些情况下,应根据其内容大小增长的表单元格不是),我在Ios &引用;此NSLayoutConstraint配置的常量超过了内部限制;,ios,uitableview,autolayout,breakpoints,lldb,Ios,Uitableview,Autolayout,Breakpoints,Lldb,在尝试调试自动布局问题时(在某些情况下,应根据其内容大小增长的表单元格不是),我在tableView:heightForRow:方法的最后一行设置了一个断点,并尝试打印systemLayoutSizeFittingSize:的值,我得到以下结果: (lldb) p ((CGSize)[cachedCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]).height 2014-10-14 11:15:
tableView:heightForRow:
方法的最后一行设置了一个断点,并尝试打印systemLayoutSizeFittingSize:
的值,我得到以下结果:
(lldb) p ((CGSize)[cachedCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]).height
2014-10-14 11:15:49.492 AppName[72132:10302054] This NSLayoutConstraint is being configured with a constant that exceeds internal limits. A smaller value will be substituted, but this problem should be fixed. Break on void _NSLayoutConstraintNumberExceedsLimit() to debug. This will be logged only once. This may break in the future.
(CGFloat) $0 = 57
好吧,那很有趣。但我尝试按照它所说的做,并在该函数上设置断点:
。。。这个断点不会被击中
- 我是否正确设置了断点李>
- 在任何情况下,我的约束可能会导致什么问题,有什么线索吗李>
()
。如果使用调试器控制台窗口通过断点集--name
命令设置此断点,则会更清楚地看到发生了什么:
(lldb) br s -n _NSLayoutConstraintNumberExceedsLimit()
Breakpoint 1: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
(lldb) br s -n _NSLayoutConstraintNumberExceedsLimit
Breakpoint 2: where = Foundation`_NSLayoutConstraintNumberExceedsLimit, address = 0x00007fff9168e6f5
(lldb)
如果您在Xcode调试会话中使用了
breakpoint list
(br l
)命令,您会看到\n布局约束编号EXCEEDSLIMIT()
断点没有在任何位置设置。现在,我已经根据br l
设置了断点(谢谢!)但它仍然不会被命中,除非我在调试器中调用p(CGSize)[cachedCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]
,在这种情况下,我可以看到命中计数上升!终于解决了问题。如果我必须手动设置标签上的preferredMaxLayoutWidth
,自动布局到底为我做了什么@RobertAtkins,你是怎么修复的?我的手机里有一个标签水平地靠近UIImageView。为了让标签正确计算它想要的高度,我必须将其preferredMaxLayoutWidth
设置为单元格的宽度,减去UIImageView和任何相邻填充的宽度。我觉得我必须这么做有点愚蠢,在iOS 8上似乎不再需要了。@RobertAtkins,看起来真的很愚蠢。如果单元格宽度不同怎么办?