如何使用xib文件支持纵向和横向?

时间:2010-11-09 06:22:18

标签: iphone ipad interface-builder

我对拥有支持所有方向的UIViewController感兴趣,并且干净地使用两个xib文件来设置其子视图。

似乎有一种可能性是使用NSBundle的loadNibNamed:方法在每次轮换时加载新的视图层次结构,但这看起来效率低下,并且可能会产生不幸的副作用。例如,从nib文件重新加载后,我的所有视图都将丢失其先前的状态,例如向文本字段添加文本等。

有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

经过一些更多的研究,我无法找到一个优雅的解决方案。因为在每次旋转时从xib文件重新加载元素似乎很慢并且消除了任何基于动态视图的数据,所以我切换到基于代码的设置(即没有更多的xib文件)。

我决定创建一个这样的方法:

// This is for an iPad root-level view controller.
- (void)setupForOrientation:(UIInterfaceOrientation)orientation {
  if (UIInterfaceOrientationIsPortrait(orientation)) {
    CGRect bounds = CGRectMake(0, 0, 768, 1004);
    bkgImageView.frame = bounds;
    // Other view positioning for portrait.
  } else {
    CGRect bounds = CGRectMake(0, 0, 1024, 748);
    bkgImageView.frame = bounds;
    // Other view positioning for landscape.
  }
  [self drawBackgroundForOrientation:orientation];
}

此方法从shouldAutorotateToInterfaceOrientation:方法调用,并递交新方向。

答案 1 :(得分:1)

不是从shouldAutorotateToInterfaceOrientation调用你的函数,你只需要说YES或NO,你应该在委托函数中真正做你喜欢的事情,比如willRotateToInterfaceOrientation,这意味着做你正在做的事情。