Приложение, которое у меня работало на iOS 7 и 8, имело некоторые незначительные проблемы на iOS9, одним из которых является то, что один контроллер просмотра получает неправильную высоту.UIViewController неправильной высоты при начальной загрузке
Следующий код:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self layoutViews];
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self layoutViews];
}
- (void)layoutViews {
NSLog(@"Size-> %@", NSStringFromCGRect(self.view.frame));
}
Производит следующий ошибочный вывод:
2015-11-06 22:42:31.737 app[62442:1136052] Size-> {{0, 0}, {375, 667}}
2015-11-06 22:42:33.318 app[62442:1136052] Size-> {{0, 32}, {667, 343}}
2015-11-06 22:42:34.885 app[62442:1136052] Size-> {{0, 64}, {375, 603}}
2015-11-06 22:45:18.063 app[62442:1136052] Size-> {{0, 32}, {667, 343}}
Когда я:
- Открыть VC в портретном
- Поворот на альбомную
- Поворот назад к портрету
- Повернуть обратно в пейзаж
кажется, что начальная нагрузка VC обеспечивает неправильный размер под self.frame.size
, а все последующие повороты правильно. Высота 603
верна, но вы можете видеть, что при двух поворотах к пейзажу это все еще неверно на 667
.
Я думал, что что-то связанное с панелью контроллера навигатора может сломать его. Мой код в методе viewDidLoad
просто:
- (void)viewDidLoad {
if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) {
[self setEdgesForExtendedLayout:UIRectEdgeNone];
}
[super viewDidLoad];
}
Который работает отлично на прошивке 8.
Update Исправлен, добавив вызов viewDidAppear
:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self layoutViews];
[activitiesTable flashScrollIndicators];
}
ли вы в строке состояния включены? –
Да, у меня всегда есть строка состояния. –