我有一个UIViewController
,在willRotateToInterfaceOrientation
,我正在呼叫[self view] setNeedsLayout];
此视图调用是子视图(UIScrollView
)layoutSubviews
方法,但UIScrollView
不会为其子视图调用layoutSubviews
。这是它的假设吗?我想如果您在某个视图上调用setNeedsLayout
,它会在每个子视图及其子视图上调用layoutSubviews
,并在...
我是否必须手动覆盖layoutsubview
中的UIScrollView
并为每个子视图调用setNeedsDisplay
?
感谢。
答案 0 :(得分:5)
我前一段时间在我的应用中观察到同样的事情,似乎setNeedsLayout
仅影响视图的子视图而不会向下移动。如果您使用自定义视图,则可以轻松地对视图进行子类化并迭代setNeedsLayout
中的子视图,并对它们执行显式setNeedsLayout
。
如果您希望它是默认行为,您可以覆盖类别中的方法,但我真的不会这样做,因为它会影响所有视图,并可能引入性能和其他意外问题。
你可以做这样的事情
@interface UIView (Layout)
- (void)setNeedsLayoutRecursively;
@end
@implementation UIView (Layout)
- (void)setNeedsLayoutRecursively {
for (UIView *view in self.subviews) {
[view setNeedsLayoutRecursively];
}
[self setNeedsLayout];
}
@end
在浏览器中输入,未经过测试