setNeedsLayout в подвиде UIView - PullRequest
       24

setNeedsLayout в подвиде UIView

4 голосов
/ 08 октября 2011

У меня есть UIViewController и в willRotateToInterfaceOrientation, я звоню [self view] setNeedsLayout];

Этот вызов представления - это метод подпредставления (UIScrollView) layoutSubviews, но UIScrollView не делает 'Звоните layoutSubviews для его подпредставлений.Это так и должно быть?Я подумал, что если вы вызовете setNeedsLayout для представления, оно будет вызывать layoutSubviews для каждого и каждого subivew и их подпредставлений и для ...

Нужно ли вручную переопределять layoutsubview в * 1015?* и позвоните setNeedsDisplay для каждого из подпредставлений?

Спасибо.

1 Ответ

5 голосов
/ 08 октября 2011

Я наблюдал то же самое в своем приложении некоторое время назад, и кажется, что 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

напечатанов браузере, не проверено

...