setNeedsLayout в подвиде UIView

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

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

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

Благодарю.

1 ответ

Решение

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

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

Другие вопросы по тегам