当你继承 UIView 时,你最好的做法是什么? 我正在尝试使用新的 ios 6 自动布局完全用代码为 View Controller 创建 View 。 因此,我对 UIView 进行了子类化,并在 #initWithFrame 中设置了基本约束(我应该在 #updateConstraints 中执行此操作吗?)。问题是我有一个带有动态文本和可变宽度的 UILabel,所以我必须在约束确定框架后设置 #preferredMaxLayoutWidth,所以我认为 #layoutSubviews 是执行此操作的最佳位置,但这样做会导致 NSInternalInconsistencyException:执行-layoutSubviews后仍然需要自动布局。 MyView的-layoutSubviews的实现需要调用super。 (运行时错误) 在你问之前,我确定我已经在我重写的每个方法中调用了 super 。 有什么想法吗?
最佳答案
也许你需要的是不要让你的 View 调用[superlayoutSubviews],而是让祖先UIView调用它的[superlayoutSubviews]。
这可以不通过子类化来实现,而是实现一个 UIView 类别,该类别将实现layoutSubViews 函数,调用 super.如果我能得到你的代码我就可以尝试。有人尝试成功here .
同样,这并不能保证问题会得到解决。苹果论坛上似乎有很多与此相关的错误报告。不幸的是,我们无法在Apple门户中浏览其他人的bug,我们只能 file our own .
作为一种解决方法,如果您的任何限制与您的 PreferredMaxLayoutWidth 参数:尝试增加或减少它。根据它自己的最高秩序,它可以改变事情,谁(除了苹果)知道 - 它可能是固定的。手指交叉!
关于ios - 约束到位后无法在layoutSubviews中设置UILabel#preferredMaxLayoutWidth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13704469/