Как строка состояния In-Call влияет на размер представления UIViewController?

Я пытаюсь понять, как представление связано с UITabBarController , UINavigationController или UIViewController реагирует на переключение строки состояния во время разговора.
Моя проблема в том, что они, кажется, ведут себя по-разному, и это вызывает у меня побочные эффекты.

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


  • UIViewController

enter image description here

статус inCall ВЫКЛ :

UIView: 0x4e2a1f0; frame = (0 20; 320 460); autoresize = W+H; ....
ON
UIView: 0x4e2a1f0; frame = (0 40; 320 440); autoresize = W+H; ...

Вот это я понимаю: когда появляется строка состояния во время вызова, высота представления UIViewController уменьшается и теряет 20, а его координата y перемещается с 20 на 40.

Это прекрасно! Я бы ожидал того же при замене классического UIViewController на UITabBarController или UINavigationController , но это не так!


  • UINavigationController

    enter image description here

Строка состояния InCall ВЫКЛ

UILayoutContainerView: 0x4b35ab0; frame = (0 0; 320 480); autoresize = W+H; ..
ВКЛ
UILayoutContainerView: 0x4e1b060; frame = (0 0; 320 480); autoresize = W+H; ..

В этом случае у представления, обрабатываемого UINavigationController, не изменяются свойства фрейма при переключении строки состояния текущего вызова ?! (почему? :()


  • UITabBarController

enter image description here OFF

UIView: 0x4b2f6a0; frame = (0 20; 320 460); autoresize = W+H; ...
ON
UIView: 0x4b2f6a0; frame = (0 20; 320 460); autoresize = W+H; ...

То же, что и в UINavigationController : вид из UITabBarController , похоже, не изменяется при переключении строки состояния при вызове.


Может кто-нибудь объяснить мне, как работает это изменение размера при отображении строки состояния при вызове?
Моя конечная цель - отобразить UIView , который отображается НАД всем UITabBarController и правильно меняет размер при отображении статуса входящего вызова. Однако я действительно не знаю, где разместить такое представление в иерархии представлений: если я добавлю его как дочерний элемент представления UITabBarController, поскольку он не реагирует на отображение состояния вызова, мой также не реагирует: (

21
задан Wheelie 24 May 2019 в 12:56
поделиться