无法在布局中设置 UILabel#首选最大布局宽度约束后布局子视图



当你对UIView进行子类时,你最好的做法是什么?我正在尝试使用新的ios 6自动布局完全在代码中为视图控制器制作视图。所以我已经子类化了 UIView 并在 #initWithFrame 中设置了基本约束(我应该在 #updateConstraints 中这样做吗?问题是我有一个具有动态文本和可变宽度的 UILabel,所以我必须在约束确定框架后设置 #preferredMaxLayoutWidth,所以我认为 #layoutSubviews 是这样做的最佳位置,但这样做会导致 NSInternalInconsistencyException:执行 -layoutSubviews 后仍然需要自动布局。MyView 的 -layoutSubviews 实现需要调用 super。(运行时错误)在你问之前,我敢肯定我已经在我覆盖的每种方法中调用了超级。知道吗?

也许你在这里需要的是不要让你的视图调用[super layoutSubviews],而是UIView,祖先,调用它的[super layoutSubviews]。

这可以通过实现的不是子类化来实现的,而是实现UIView的一个类别,该类别将实现layoutSubViews函数,调用super。如果我能有你的代码,我可以尝试。有人在这里成功尝试过。

同样,这并不能保证此问题将得到解决。在Apple论坛中似乎有很多关于此的错误报告。不幸的是,我们无法在Apple门户中浏览其他人的错误,我们可以提交自己的错误。

作为一种解决方法,我还建议您的任何约束是否与您的约束冲突首选MaxLayoutWidth参数:尝试增加或减少它。根据它自己的压倒一切的顺序,它可以改变事情,谁(除了苹果)知道 - 它可能是固定的。祈祷!

这似乎对我有用,我无法解释为什么,但它确实如此。

-(void)layoutSubviews
{
[super layoutSubviews];
layout code here, including updated constraints 
[super layoutSubviews];
}

最新更新