Поворачивайте iPad, пока отображается видимость, и мой UITableView перемещается

Это ДЕЙСТВИТЕЛЬНО странно, и я не уверен, что происходит.

У меня есть UISplitViewController в приложении для iPad. Я могу снова и снова поворачиваться с портрета на пейзаж, и он работает точно так, как ожидалось. Однако, если я в ориентации Portrait, и я нажимаю кнопку, чтобы отобразить popover, который содержит левую часть UISplitViewController, а затем вращается, пока он виден, когда поворот завершен, теперь теперь сдвигается левая таблица вниз, оставляя черный промежуток между ним и панелью Nav.

Какая черта может вызвать это?

Я прокомментировал методы -willRotateToInterfaceOrientation: duration и -didRotateFromInterfaceOrientation: , и проблема все еще существует, поэтому она не вызвана моим кодом вращения. (Этот код просто явно отклонил этот popover).

После поворота, вызывающего проблему, я рекурсивно распечатываю иерархию представлений левой стороны и размеры кадров:

UILayoutContainerView ({{0, 0}, {320, 748}})
     UINavigationBar ({{0, 0}, {320, 44}})
     UILayoutContainerView ({{0, 37}, {320, 711}})
         UINavigationTransitionView ({{0, 0}, {320, 711}})
             UIViewControllerWrapperView ({{0, 44}, {320, 667}})
                 UIView ({{0, 0}, {320, 667}})
                     UITableView ({{0, 0}, {320, 667}})

Он показывает, что навигационная панель имеет 44 пиксела в высоту, контейнер представления, в котором находится левый контроллер, начинается с 0,44, а мой рабочий стол начинается с 0,0, но меньше. Я не понимаю, почему это не отображается правильно.

Вот что должно выглядеть в ландшафтной ориентации. Слева вы увидите заголовок раздела таблицы «Что вы хотите знать?» и он находится прямо под панелью Nav с кнопкой «Switch to Calculator».

enter image description here

Когда я поменяю ориентацию «Портрет» и коснитесь «Что вы хотите знать?» , показывает popover, который содержит левый навигационный контроллер с UITableViewController.

enter image description here

Теперь, когда я поворачиваюсь назад к пейзажу, черный зазор появляется между навигационной панелью и UITableView.

enter image description here

1
nl ja de
Я попытался добавить layoutSubviews и ничего не изменил. Я попытался отклонить popover перед ротацией, но это вызвало состояние гонки и вызвало сбой приложения. Вы можете видеть это в моем другом вопросе здесь:
добавлено автор Kenny Wyland, источник
Нет, если я удалю код увольнения, пробел все же появится.
добавлено автор Kenny Wyland, источник
похоже, что он пытается настроить навигационную панель дважды. может попробовать сделать [self.view layoutsubviews]? после вращения? или всплывающее окно перед ротацией?
добавлено автор Mike M, источник

1 ответы

Я помню, что у меня была проблема, очень похожая на этот год, работая над этим приложением, но мне не удалось найти никаких старых сообщений StackOverflow об этом. Однако я вспомнил, что была причина, по которой я включил навигатор (а точнее, сделал его видимым) внутри popover в портретном режиме. Для эстетических целей я предпочел бы, чтобы это было видно в ландшафте, но не было видно в портрете. Затем я вспомнил причину, по которой я включил ее, потому что это, похоже, исправить эту проблему.

Похоже, что это была странная ошибка в iOS, но показывая Nav Bar, обе ситуации, похоже, ее исправили. Итак, я решил изменить его на то, как я действительно хотел: видимый в пейзаже, не видимый в портрете ... и БАМ. Черный зазор исчезает. Таким образом, похоже, что странная ошибка все еще существует, но сейчас она работает наоборот.

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        UIDeviceOrientation deviceOrientation = [UIApplication sharedApplication].statusBarOrientation;
        BOOL isPortrait = UIDeviceOrientationIsPortrait(deviceOrientation);

        if (isPortrait) {
            self.navigationController.navigationBarHidden = YES;
        } else {
            self.navigationController.navigationBarHidden = NO;
        }
    }
}
0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.