Как получить правильную высоту вида в viewDidLayoutSubviews?
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
NSLog(@"viewDidLayoutSubviews view.height: %f", self.view.frame.size.height);
}
В приведенном выше view.height
всегда 1024, независимо от ориентации устройства. Даже поворот устройства приведет к viewDidLayoutSubviews
будет вызван, и он все равно будет выводить 1024.
Тем не менее, представление выглядит хорошо. Какого черта я пропускаю?
2 ответа
Когда iOS выполняет автоматический поворот, это не меняет frame
свойство представления корневого контроллера. Что он делает, так это применяет преобразование и анимирует изменение преобразования. Чтобы увидеть "фактический" размер вашего просмотра, проверьте bounds
собственность вместо frame
имущество.
Цитировать документацию Apple о transform
имущество:
Предупреждение: если это свойство не является преобразованием идентичности, значение свойства frame не определено и поэтому должно игнорироваться.
Я думаю, что пришло время для обновления в iOS8. В iOS8:
- UIScreen теперь ориентирован на интерфейс:
- [UIScreen bounds] теперь ориентирован на интерфейс
- [UIScreen applicationFrame] теперь ориентирован на интерфейс
- Уведомления о рамке строки состояния ориентированы на интерфейс
- Уведомления о кадре клавиатуры ориентированы на интерфейс