2015-06-14 8 views
2

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

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

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

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

ответ

14

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

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

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

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

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

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

    class ViewController: UIViewController, UIBarPositioningDelegate { 
        func positionForBar(bar: UIBarPositioning) -> UIBarPosition { 
         return .TopAttached 
        } 
    } 
    

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

enter image description here enter image description here enter image description here

+0

Спасибо! Это мой первый раз, когда я использовал autolayout, и, как вы говорите, я установил ограничение на верхнюю часть супервизора, а не «верхний макет». Посредством сопоставления с этим, он работает как магия, как и ваши скриншоты. Мне не нужно было добавлять добавленный код, и я смог сохранить свою собственную панель инструментов. Еще раз спасибо! – Rob