当你继承 UIView 时,你最好的做法是什么?我正在尝试使用新的 ios 6 自动布局完全在代码中为视图控制器做一个视图。所以我继承了 UIView 并在#initWithFrame 中设置了基本约束(我应该在#updateConstraints 中这样做吗?)。问题是我有一个带有动态文本和可变宽度的 UILabel,所以我必须在约束确定框架之后设置#preferredMaxLayoutWidth,所以我认为#layoutSubviews 是这样做的最佳位置,但这样做会导致 NSInternalInconsistencyException:执行 -layoutSubviews 后仍需要自动布局。MyView 的-layoutSubviews 实现需要调用super。(RuntimeError) 在你问之前,我确定我在我覆盖的每个方法中都调用了 super。任何的想法?
问问题
1207 次
2 回答
1
也许你在这里需要的是不要让你的视图调用[super layoutSubviews],而是UIView,祖先,调用它的[super layoutSubviews]。
这不能通过子类化来实现,而是实现一个 UIView 的类别,它会实现 layoutSubViews 函数,调用 super. 如果我能得到你的代码,我本可以尝试的。这里有人试过成功。
同样,这并不能保证这将得到解决。Apple 论坛中似乎有很多关于此的错误报告。不幸的是,我们无法在 Apple 门户中浏览其他人的错误,我们只能提交自己的.
作为一种解决方法,我还建议您是否有任何约束与您的 preferredMaxLayoutWidth 参数冲突:尝试增加或减少它。根据它自己的最重要的顺序,它可以改变事情,而且谁(除了苹果)知道——它可能是固定的。手指交叉!
于 2012-12-13T14:04:28.523 回答
1
这似乎对我有用,我无法解释为什么,但确实如此。
-(void)layoutSubviews
{
[super layoutSubviews];
layout code here, including updated constraints
[super layoutSubviews];
}
于 2013-01-24T20:02:32.373 回答