Настройка видов, когда строка состояния скрывается при вращении

Я искал ответ на этот вопрос, но нашел только людей с похожими проблемами, а не с этой, поэтому, надеюсь, кто-то здесь может мне помочь!

У меня есть приложение для iPad. На iPad, когда вы держите iPad в книжной или альбомной ориентации, всегда отображается строка состояния с часами и батареей. По этой причине у меня есть несколько пользовательских панелей инструментов в верхней части некоторых из моих контроллеров представления, которые учитывают эти 20 точек.

Сейчас я работаю над тем, чтобы сделать мое приложение универсальным. Первое, что я заметил, это то, что когда iPhone помогает в портретном режиме, отображается строка состояния, но когда она удерживается в ландшафтном режиме, строка состояния скрывается, и теперь у меня есть панель инструментов, которая на 20 пунктов выше.

Я не заинтересован в том, чтобы всегда скрывать или показывать строку состояния. Я думаю, что функциональность скрытия его в ландшафтном режиме на телефоне в порядке. Что я хочу сделать, так это уметь определять, когда строка состояния скрыта, чтобы я мог отрегулировать положение Y на моей панели инструментов (поэтому установите его либо в 0, либо в -20). Еще лучшим решением было бы, если бы у меня был способ установить ограничения макета для обработки этого сценария.

1 ответ

Решение

Правильный подход:

  • Используйте обычную панель инструментов с нормальной высотой - не устанавливайте никаких ограничений на высоту.

  • Добавьте ведущее ограничение 0 к суперпредставлению (не поле суперпредставления), конечное ограничение 0 к суперпредставлению (не поле суперпредставления)

  • Добавьте верхнее ограничение 0 в верхнее руководство по макету (или в верхнюю часть безопасной области). Похоже, что это оставит 20 пикселей пространства над панелью инструментов, но рассмеяться злой смех и продолжить.

  • Установите контроллер представления в качестве делегата панели инструментов (для этого есть выход делегата).

  • Пусть контроллер представления примет UIBarPositionDelegate и реализует метод делегата следующим образом:

    class ViewController: UIViewController, UIBarPositioningDelegate {
        func position(for bar: UIBarPositioning) -> UIBarPosition {
            return .topAttached
        }
    }
    

Это приведет к тому, что кажущаяся высота панели инструментов будет увеличена за строкой состояния, когда есть строка состояния, но она будет иметь нормальную высоту и ударить по вершине, когда строка состояния отсутствует.

Другие вопросы по тегам