Документы Apple не говорят, какая правильная реализация для loadView.
Я обнаружил, что если вы реализуете loadView следующим образом:
- (void)loadView
{
self.view = [[UIView alloc] init];
}
... тогда вы получите другое поведение, чем если бы вы его вообще не реализовали. В частности, в одном проекте из 20 строк я обнаружил, что viewWillAppear вызывается с фреймом нулевого размера для self.view - если вы не используете версию LoadView по умолчанию Apple по умолчанию.
Глядя на Google, существует множество "обучающих программ", которые обеспечивают явно неправильные реализации loadView - например, force-setting size (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;
}