Всем известно, что вы не можете доверять размеру фрейма в методе init/viewDidLoad UIViewController; это:
- (void)viewDidLoad: {
NSLog(@"%d", self.view.frame.size.width);
}
будет печатать неправильные размеры во многих случаях (в частности, он сильно разбит в ландшафтном режиме)
Это приведет к возврату всегда скорректированных результатов, поэтому неплохо разместить макеты субвью:
- (void)viewWillAppear: {
NSLog(@"%d", self.view.frame.size.width);
}
Проблема заключается в том, что viewWillAppears вызывается каждый раз, когда появляется представление, поэтому он не подходит для размещения или добавления subviews. Таким образом, вы в конечном итоге объявляете каждый вид в интерфейсе, и в итоге вы получаете огромные файлы заголовков, которые мне совсем не нравятся, поскольку большинству элементов больше не нужны манипуляции после начальной настройки.
Итак, первый вопрос: Есть ли лучший способ для обработки позиционирования подпрограмм?
Вопрос два очень связан, скажем, у меня есть подкласс UIView, включая различные другие подпункты. Я объявляю его внутри своего интерфейса, и я выделяю/инициализирую его в методе init/viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
...
menu = [[SNKSlidingMenu alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
...
}
Как мы уже знаем, теперь нам нужно переместить его в viewWillAppear, чтобы получить более точное чтение
- (void)viewWillAppear:(BOOL)animated{
....
menu.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
....
}
Проблема заключается в том, что, конечно, все подсмотры также необходимо переместить. Это выполняется с помощью функции layoutSubviews, которая вызывается автоматически, но у нас есть та же проблема: Все подзапросы должны быть объявлены внутри интерфейса класса SNKSlidingMenu. Есть ли способ обойти это?
Спасибо.