Вид UIViewController имеет странный 20px y margin
Я добавляю представление UIViewController к другим представлениям UIViewController (используя новые API-интерфейсы UIViewController Containment). После добавления vc-представления в качестве другой подвивки, есть странный 20px margin сверху.
Я зарегистрировал представление, и он из источника был 0,0. Однако, когда я регистрирую представление viewview, это:
<UIViewControllerWrapperView: 0x6c5e2c0; frame = (0 20; 703 748); autoresize = RM+BM; layer = <CALayer: 0x6c54190>>
Я могу, очевидно, изменить его на 0,0. Но мне интересно, как правильно это сделать? Почему vc view viewview frame 0,20? Должен ли я изменить это или есть лучший способ обойти этот странный запас?
Спасибо
Ответы
Ответ 1
Узнал, в чем проблема. Нужно вызвать addChildViewController: на себя. Итак, вот последовательность вызовов, которые вам нужно сделать, чтобы заставить сдерживание работать правильно:
[self addChildViewController:navVC];
[navVC didMoveToParentViewController:self];
[mainView addSubview:navVC.view];
self - это контроллер родительского представления. navVC - контроллер дочернего представления, который вы добавляете. mainView - это представление в контроллере родительского представления, к которому вы собираетесь добавить представление контроллера детского просмотра.
Ответ 2
Чтобы устранить эту проблему, просто check the box "Wants Full Screen"
на раскадровке.
Проблема возникает из-за того, что ParentViewController показывает панель навигации.
Как сказано в документации Apple:
Если ваше приложение отображает строку состояния, представление сжимается, чтобы оно не перекрывало строку состояния. В конце концов, если строка состояния непрозрачна, нет никакого способа увидеть или взаимодействовать с содержимым, лежащим под ним. Однако, если ваше приложение отображает полупрозрачную строку состояния, вы можете установить, что значение вашего контроллера представления хочет, чтобы свойство FullScreenLayout было YES, чтобы ваше представление отображалось в полноэкранном режиме. Строка состояния рисуется над верхней частью представления.
Ответ 3
Я предпочитаю код ниже, работает для меня.
[self.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
Ответ 4
Вам нужно добавить одну строку перед загрузкой контроллера первого представления
- (void) viewDidLoad
{
self.automaticallyAdjustsScrollViewInsets = NO;
[super viewDidLoad];
}
Ответ 5
Даже если вы попытались установить выпадающее меню "Строка состояния" на "none", проверьте свойства размера вашего представления. Удостоверьтесь, что он еще не получил некоторого жестко заданного значения высоты 460, или y происхождения 20 (в графическом дизайнере Xcode). И если вы хотите, чтобы этот вид заполнил все его родительское представление, убедитесь, что маска авторезиста установлена в свойствах, которые должны быть прикреплены ко всем сторонам (сверху, слева, внизу, справа) и, возможно, также растянуты.
Просто глядя на ваш отладочный вывод, похоже, что свойства авторезистировки устанавливаются только на UIViewAutoresizingFlexibleBottomMargin
и UIViewAutoresizingFlexibleRightMargin
.
Наконец, содержащее представление, вероятно, должно иметь флажок Авторезистировать Subviews.
Ответ 6
Взгляните на свойство needsFullScreenLayout. Если установлено YES, представление будет проходить ниже UIStatusBar.
Ответ 7
У меня была та же проблема, но я решил ее в IOS 9 с помощью ограничений (в построителе интерфейса). Я не использовал полноэкранный режим, потому что он устарел.
Добавьте ограничение ведущего и trailingMargin и дайте им константу -20
![введите описание изображения здесь]()
Ответ 8
Хотя у меня нет опыта работы с API-интерфейсами сдерживания, я решил много проблем "за-20", установив строку состояния "Нет" (см. ниже) в "Identity Inspector".
![]()
Ответ 9
Просто используйте этот метатег viewport.
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
Ввод "height = device-height" там вызовет эту проблему.