Получите фрейм CGRect внутреннего contentView UINavigationController во время или до loadView - PullRequest
3 голосов
/ 07 марта 2012

Документы Apple говорят:

Note: Because the amount of space available for the custom view can vary
(depending on the size of the other navigation views), your custom view’s
autoresizingMask property should be set to have a flexible width and height.
Before displaying your view, the navigation controller automatically
positions and sizes it to fit the available space.

Это замечательно, кроме ... Мне нужно знать, какой размер будет использовать UINavController ДО представление добавляется во фрейм, потому что содержимое, которое я буду отображать, отличается в зависимости от размера.

Это внутри метода loadView UIViewController, который добавляется в UINavigationController.

Ответы [ 3 ]

5 голосов
/ 07 марта 2012

Ну, технически вы не должны определять размеры своих подпредставлений в методе loadView.Я не использую перья, и почти во всех моих контроллерах вида loadView действительно маленький: self.view = [[UIView alloc] init];.Затем в viewDidLoad я добавляю все свои подпредставления в self.view.Наконец, я делаю все мои изменения размера в viewWillAppear, потому что в этот момент self.view будет подходящего размера.

Если вам необходимо выбрать размеры в методе loadView, вам придется рассчитать размеры вручную ... т.е. выяснить ориентацию устройства (self.interfaceOrientation), определить размер экрана,вычтите любые другие элементы, которые вы считаете на экране (например, панель навигации и т. д.).Но этот метод не рекомендуется.

1 голос
/ 07 марта 2012

Поскольку иерархия представления внутри контроллера навигации не задокументирована, вероятно, нет надежного способа получить эту информацию.

Вы должны:

  1. Либо запросите у self.navigationController.view его границы, и вычтите вручную комнату, занимаемую панелью навигации (если navigationBarHidden равно NO) и панелью инструментов (если toolbarHidden равно NO)

  2. Или вручную просмотреть подпредставления self.navigationController.view и попытаться определить представление содержимого (если такая вещь существует) или пространство, занимаемое другими представлениями.

Оба решения опираются на внутренние компоненты, которые могут измениться в будущих выпусках iOS и поэтому далеки от оптимальных. Разве вы не можете дождаться, пока viewDidLoad не решит, какой контент отображать?

0 голосов
/ 07 марта 2012

Как насчет использования KVO для свойства viewController.view.frame?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...