【问题标题】:"This NSLayoutConstraint is being configured with a constant that exceeds internal limits"“这个 NSLayoutConstraint 被配置了一个超出内部限制的常量”
【发布时间】:2014-12-09 00:51:00
【问题描述】:

在尝试调试 AutoLayout 问题时(在某些情况下,应该根据其内容大小而不是增长的表格单元格),我在 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

好吧,这很有趣。但我尝试按照它所说的去做,并在该函数上设置一个断点:

...而且这个断点没有被命中。

  • 我是否正确设置了断点?
  • 无论如何,有什么线索可以说明我的约束可能有什么问题导致这种情况?

(令人讨厌的是,它似乎在某些情况下有效,但在其他情况下无效,我看不出设置有什么不同。)

【问题讨论】:

    标签: ios uitableview autolayout breakpoints lldb


    【解决方案1】:

    从符号名称中省略 ()。如果您使用调试器控制台窗口使用breakpoint set --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) 命令,您会看到_NSLayoutConstraintNumberExceedsLimit() 断点没有设置在任何位置。

    【讨论】:

    • 好吧,现在我已经根据br l 设置了一个断点(谢谢!)但它仍然没有被命中——除非我在调试器中调用p (CGSize)[cachedCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize],在这种情况下我可以看到命中数上升了!
    • 终于解决了问题。如果我必须手动在标签上设置preferredMaxLayoutWidth,那么自动布局到底在为我做什么?!
    • @RobertAtkins,你是怎么解决的?
    • 我的单元格中有一个与 UIImageView 水平相邻的标签。为了让标签正确计算所需的高度,我必须将其preferredMaxLayoutWidth 设置为单元格的宽度,减去 UIImageView 的宽度和任何相邻的填充。我不得不这样做,我觉得有点愚蠢,而且似乎在 iOS 8 上不再需要。
    • @RobertAtkins,看起来真的很愚蠢。如果单元格宽度不同怎么办?
    猜你喜欢
    • 1970-01-01
    • 2013-10-04
    • 2012-05-03
    • 2010-12-09
    • 1970-01-01
    相关资源
    最近更新 更多