Подтвердить что ты не робот

Определите правильный размер в loadView

Как последовательно определять правильный размер для макета вашего представления в loadView?

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

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

Я просмотрел руководство UIViewController, и Apple использует UIScreen mainScreen applicationFrame, но в их примере это делается, потому что они делают полноэкранное приложение.

Я видел здесь несколько ответов, но никто не обращается к тому, как это сделать согласованным образом.

Спасибо за предоставленную помощь.

4b9b3361

Ответ 1

- (void) loadView {
     //self.wantsFullScreenLayout = YES; //could add this for translucent status bars
     UIView *view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];
     self.view = view;
}

От Apple Просмотреть Руководство по программированию контроллера для создания программного вида:

  • Создайте объект корневого представления, размер которого соответствует экрану. Корневой вид действует как контейнер для всех других представлений, связанных с вашим контроллером представления. Вы обычно определите рамку для этого представления в соответствии с размером окна приложения, которое должно заполнить экран. Тем не менее, контроллер вида также регулирует размер кадра по мере необходимости для обеспечения присутствия различных видов, таких как строка состояния системы, панель навигации или панель вкладок. Вы можете использовать общий объект UIView, пользовательский вид, который вы определяете, или любое другое представление, которое может масштабироваться для заполнения экрана.

Затем он имеет пример, аналогичный тому, который я написал выше.

Ответ 2

Вам не нужно знать точный размер. VC не должен сам себя определять, что ответственность его родителя. Просто создайте UIView с [[UIView alloc] init], как было подтверждено инженером Apple UIKit Энди Матушаком в Twitter: https://twitter.com/andy_matuschak/status/365227892151558144

Ответ 3

"Правильный" ответ, вероятно, состоит в том, чтобы создать пользовательский подкласс UIView и сделать все позиционирование в представлении subview в вашем переопределении layoutSubviews. Затем ваш подкласс будет назначен для self.view в loadView.

Тем не менее, он также работает, чтобы использовать viewDidLoad, чтобы добавить subview одинакового размера в self.view. (Хотя вы должны быть готовы к тому, чтобы этот вид изменил размер. - Правильная настройка autoresizingMasks может быть хорошим способом сделать это.)

Ответ 4

Я сделал приложение, он загружает несколько UITextView, UIButtons и элемент управления UISegment. Что я сделал в viewWillAppear, я называю метод изменения размера, который я сделал.

Он программно изменяет размеры всех подпрограмм в UIViewController. Это потому, что авторезистирование в IB является настолько хорошим.

В моей функции calcViewSize я получаю такие размеры:

CGFloat width = [[UIScreen mainScreen] applicationFrame].size.width;
CGFloat height = self.view.frame.size.height; //this will retrieve the frame we are drawn into.

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

Используйте Interface Builder, чтобы получить размеры.

Последнее примечание. Чтобы изменить размеры в IB, выберите "Просмотр", выберите "Инспектор атрибутов", отключите "Строку состояния", теперь в "Инспекторе размеров" вы можете изменить размер представления, перестроить свои подпрограммы и записать номера на место в вашем коде.