在iPhone中保持我的应用程序的纵向和横向模式布局

时间:2011-03-09 10:31:42

标签: iphone user-interface layout rotation landscape

我的应用程序中有一个视图,它有三个segmentedButtonControllers,我用纵向模式设计它。当我旋转屏幕时,整个用户界面......就是不对。

enter image description here enter image description here

我的问题是,我应该分别设计纵向和横向模式吗?如果是这样我怎么做?

PS。实际上我不需要iPhone应用程序的旋转支持,但我打算为iPad制作相同的应用程序,每个视图都必须可以旋转。谢谢。


编辑: 刚刚找到了很好的例子 Easiest way to support multiple orientations? How do I load a custom NIB when the application is in Landscape?

4 个答案:

答案 0 :(得分:3)

我说这取决于内容。有时,在Interface Builder的Inspector中正确设置UI元素的自动调整就足够了,并且您获得了令人满意的效果,但有些情况下,仅调整视图大小并不能充分利用屏幕空间。在你的情况下,例如,只是将分段控件扩展到整个宽度可能不会像将它们彼此相邻排列那样好,以使文本位于底部。

如果要分别为两种模式进行设计,可以将它们设置为不同的视图,并在相应的视图之间切换。很好的例子可以在iPhone Cookbook的第4章找到。作者所做的是在方向改变时切换视图如下:

- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation
 { 
     if ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
        || (interfaceOrientation == UIInterfaceOrientationLandscapeRight))
       self.view = landscapeView;
    else if ((interfaceOrientation == UIInterfaceOrientationPortrait)
        || (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown))
       self.view = portraitView;
    return YES;
 }

答案 1 :(得分:1)

我强烈建议您在文档中查找UIViewController类并全部阅读(假设您还没有)。您需要的关键方法包括willRotateToInterfaceOrientation:duration:,描述如下:

willRotateToInterfaceOrientation:持续时间: 在用户界面开始旋转之前发送到视图控制器。

  

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

     

参数toInterfaceOrientation   用户的新方向   接口。可能的值是   在UIInterfaceOrientation中描述。   duration待处理的持续时间   旋转,以秒为单位。   讨论子类可以覆盖   这种方法执行额外的   紧接着之前的行动   回转。例如,您可以使用   此方法禁用视图   交互,停止媒体播放,或   暂时关闭昂贵的绘图   或实时更新。你也可以使用它   将当前视图换成一个   反映了新的界面   取向。当这个方法是   调用,interfaceOrientation   属性仍包含视图   原来的方向。

     

无论如何调用此方法   您的代码是执行一步还是执行   两步轮换。

     

可用性在iOS 2.0和iOS中可用   后面。

听起来你应该也包括:

 - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return NO;
}

答案 2 :(得分:0)

只需将控件的autoresizingMask属性设置为

即可
UIViewAutoresizingFlexibleWidth

答案 3 :(得分:0)

我正在寻找解决方案,最后选择以编程方式设置布局元素,如this文章中所述。