Apple 的 NIB 本身不支持旋转,所以我尝试为同一个视图使用两个不同的 NIB - 每个方向一个。
我尝试了以下,它的工作原理,除了......它打破了一些子视图(例如苹果的 OpenGL / GLKit 视图)。
它只会破坏第一次旋转 - 所有后续旋转都完全按预期工作。所以,我假设苹果的“viewWill/Did”调用堆栈中有一个我在这里遗漏的微妙之处。问题是,我从来没有找到过真正的文档——只是在 Apple 文档中到处模糊地引用“一些”发生的调用,以及何时/为什么。
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if( UIInterfaceOrientationIsLandscape( toInterfaceOrientation) )
{
[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@-landscape", NSStringFromClass([self class])] owner:self options:nil];
[self viewDidAppear:FALSE];
[self viewWillDisappear:FALSE];
[self viewDidReload];
[self viewWillAppear:FALSE];
[self viewDidAppear:FALSE];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-landscape"] forBarMetrics:UIBarMetricsDefault];
}
else
{
[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@", NSStringFromClass([self class])] owner:self options:nil];
[self viewDidAppear:FALSE];
[self viewWillDisappear:FALSE];
[self viewDidReload];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-portrait"] forBarMetrics:UIBarMetricsDefault];
[self viewWillAppear:FALSE];
[self viewDidAppear:FALSE];
}
}