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
набрано в браузере, не проверено