На iOS, почему высота кадра вида остается почти одинаковой после вращения?

В ViewController.m , на iPad , если мы напечатаем высоту кадра представления в обработчике события касания:

 NSLog(@"Height of main view is %f", self.view.frame.size.height); 

затем в режиме портрета значение 1004 (20 пикселей для строки состояния устройства, поэтому 1024 – 20 = 1004), и если устройство повернуто в альбомный режим, я ожидал, что оно будет около 768 или 748, но значение, напечатанное на самом деле 1024. (обновление: если приложение запущено в ландшафтном режиме, то без вращения оно также отображается как 1024). Почему это так, и есть ли правило, чтобы ожидать получения значения 748 или 768? (Есть ли более чем один способ получить это?)

3 Solutions collect form web for “На iOS, почему высота кадра вида остается почти одинаковой после вращения?”

В документах Apple о кадре UIView:

Предупреждение. Если свойство transform не является преобразованием идентичности, значение этого свойства не определено и поэтому должно игнорироваться.

Поэтому вы должны использовать свойство bounds .

Вместо этого вы можете управлять ориентацией программно и перезаписать метод willRotateToInterfaceOrientation. См. Способ:

 #define IPAD_SIZE_PORTRAIT CGSizeMake(768, 960) #define IPAD_SIZE_LANDSCAPE CGSizeMake(1024, 704) -(void)relayoutSubviews:(UIInterfaceOrientation)orientation { CGSize scrSize; if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight)) { scrSize = IPAD_SIZE_LANDSCAPE; } else { scrSize = IPAD_SIZE_PORTRAIT; } self.view.bounds = CGRectMake(0, 0, scrSize.width, scrSize.height); self.view.frame = CGRectMake(0, 0, scrSize.width, scrSize.height); } -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { [self relayoutSubviews:toInterfaceOrientation]; } 

Причиной этого является то, что при повороте устройства рамка представления изменяется для размещения в строке состояния, но фактически не поворачивает рамку представления. Устройство просто отображает представление во вращающемся состоянии, в то время как представление фактически не вращается. Я полагаю, что это изменение затронуло subviews, но общий вид не таков.

  • UIModalPresentationStyle.CurrentContext Swift iOS 7
  • Расширение UIViewController для создания экземпляра из раскадровки
  • Скрытие кнопок в UIViewController из делегата UIView
  • Направление UIPageViewController только вперед
  • Как нажать UIViewController с файлом NIB
  • Цвет подсветки UINavigationController
  • Где инициализировать что-то еще в UIViewController
  • Как snapshoting мешает родительским / дочерним отношениям?
  • Выполнение Segue, вызванное UITableViewCell
  • iOS - Segues и статические ячейки
  • topLayoutGuide в контроллере детского просмотра
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.