Макет представления начинается с нижней части панели навигации.При переходе от большой титульной страницы к маленькой титульной странице панель навигации становится короче, а затем появляется пробел в навигации.
Чтобы решить эту проблему, компоновка представления контроллера должна начинаться с нулевой точки экрана,и макет его подпредставлений должен начинаться с нижней части навигационной панели, чтобы его нельзя было покрыть.
На макет могут влиять два свойства: полупрозрачный и dgeForExtendedLayout .Для свойства полупрозрачности следует установить значение YES или удалить его везде (по умолчанию установлено значение YES).Для свойстваdgeForExtendedLayout должно быть установлено значение UIRectEdgeAll или его необходимо удалить везде (значение по умолчанию - UIRectEdgeAll).
Для страницы UITableViewController оно будет автоматически адаптироваться к панели навигации ( selectedContentInset табличного представления изменится,предпосылка установлена contentInsetAdjustmentBehavior в UIScrollViewContentInsetAdjustmentAutomatic или удалить настройку), любой другой код не должен изменяться.
Для UIViewController подпункты основного представления должнынастроить его расположение в нижней части панели навигации.Пример кода, например,
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
self.searchBgTopLayoutConstraint.constant = NORMAL_STATUS_AND_NAV_BAR_HEIGHT;
#top constraint of the top most view
}
Если первое представление ( A ) подпредставлений наследуется от UIScrollView, а большой заголовок изменится в соответствии с A свиток.Подробности можно найти в Уменьшить большой заголовок при прокрутке (не UITableViewController) iOS 11 .
Если самый верхний вид наследует от UIScrollView, например mainTableView , вы можетеустановите начало макета с нулевой точки и установите contentInset в нижней части панели навигации.Он выглядит как UITableViewController, и панель навигации изменяется при прокрутке mainsTableView без пробелов.Пример кода, например,
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
self.mainTableView.contentInset = UIEdgeInsetsMake(NORMAL_STATUS_AND_NAV_BAR_HEIGHT, 0, 0, 0);
}