На 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, но общий вид не таков.

  • Пользовательский контроллер контейнера
  • iOS - регистрируются события пользовательского интерфейса, такие как контроллер представления / исчезает
  • iOS - Передача переменной для просмотра контроллера
  • Как получить доступ к нескольким контроллерам View из App Delegate и / или другим контроллерам View?
  • Наличие класса Swift как подкласс UIViewController, так и UITableViewDelegate
  • Обнаруживать, когда представленный диспетчер просмотра отклонен
  • Как открыть контроллер вида в ландшафтном режиме?
  • UIViewController не сохраняет свой программно созданный UISearchDisplayController
  • Раскадровки + классы размеров: как реализовать различные Segues, ViewControllers, UserFlow для разных классов устройств / классов?
  • Как передать данные в диспетчер представлений и загрузить их, прежде чем нажимать их на стек навигации?
  • Объединение UIViewController в UINavigationController
  • iOS: обработка UIGestureRecognisers в представлениях UI (Sub)
  • Interesting Posts

    Проблемы с вращением UIActivityViewController

    AVPlayer не обновляет currentPlaybackTime при поиске в обратном направлении

    Конвертация видео MOV в Mp4 iPhone Программно

    Откройте конкретную вкладку / представление, когда пользователь получает push-уведомление

    Пользовательские кнопки iOS не отображаются для интерактивного уведомления

    Mutable sets в NSManagedObjects?

    AudioFileSetProperty возвращает 'kAudioFileUnsupportedPropertyError (pty?)'

    ObserveSingleEvent возвращает старые данные

    Получение ошибки ACErrorPermissionDenied (код ошибки 7) для Facebook при использовании Social Framework

    Как обнаружить приложение iOS было переустановлено (из XCode) или обновлено (из AppStore)

    Изменение контрастности, яркости, насыщенности или цвета UIImage

    ручная кнопка нажимать на iphone

    В Swift, как я могу объявить переменную определенного типа, которая соответствует одному или нескольким протоколам?

    Код не в корневом режиме иерархии окон

    Push Notification Изменение значка AppIcon

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.