4

我有一个UIViewControllerand in willRotateToInterfaceOrientation,我在打电话[self view] setNeedsLayout];

这个视图调用是它的子视图的 (a UIScrollView)layoutSubviews方法,但UIScrollView不调用layoutSubviews它的子视图。这是应该的样子吗?我想如果你调用setNeedsLayout一个视图,它会调用layoutSubviews每一个 subivew 和他们的 subviews ......

我是否必须手动覆盖layoutsubviewUIScrollView调用setNeedsDisplay每个子视图?

谢谢。

4

1 回答 1

8

前段时间我在我的应用程序中观察到了同样的事情,它似乎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

在浏览器中输入,未测试

但是,请注意,这不是一个好习惯!您应该只更新需要更新的内容。这可能会导致严重的性能损失。谨慎使用!

于 2011-10-08T16:57:24.933 回答