В документации Apple не сказано, какова правильная реализация loadView.
Я обнаружил, что если вы реализуете loadView следующим образом:
- (void)loadView
{
self.view = [[UIView alloc] init];
}
...то вы получите другое поведение, чем если бы вы его вообще не реализовывали. В частности, в одном 20-строчном проекте я обнаружил, что viewWillAppear вызывается с фреймом нулевого размера для self.view — если только вы не используете версию loadView от Apple по умолчанию.
Если посмотреть в Google, то можно найти множество «руководств», в которых представлены заведомо неправильные реализации loadView.принудительно установите размер (320 480), потому что автор учебника «обнаружил, что это работает, если я сделаю это».
Я хотел бы знать, какой должна быть правильная реализация.
NB: в приведенном выше примере я добавляю его в иерархию представлений внутри AppDelegate следующим образом:
[self.window addSubview:(UIViewController*).view];
Я считаю, что при наличии UINavigationController или UITabBarController Apple выполняет некоторые дополнительные действия, которые — в качестве побочного — эффект - заставляет однострочную реализацию loadView работать нормально. Но я хочу написать его правильно, чтобы он работал всегда!
NB: я попытался установить маску автоматического изменения размера в корневом представлении, но это не меняет того, что происходит:
- (void)loadView
{
self.view = [[UIView alloc] init];
self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}