使用强制横向方向的应用程序很困难

时间:2009-09-03 01:23:57

标签: iphone uiview uiviewcontroller

我有两个应用程序,它们都强制用户在横向模式下使用iPhone,以便拥有更宽的屏幕,而不是更高的屏幕。

我发现的一件事是我的第一个视图看起来很好,但所有其他视图都会将他们的子视图(UIButtons,UIPicker,UIViews)挤到一边或剪切(取决于元素是否设置为移动,调整大小或保持与视图大小相同的位置)。我的所有观点都是在横向IB中设计的。我的底层UIWindow,以及我能想到的一切都以横向为导向。甚至我的plist文件也设置了UIInterfaceOrientationLandscapeRight标志。

现在,如果我与rootview控制器同时加载所有视图,那么我没有问题。但如果我以后加载了视图,它们会被剪裁或挤压。

解决问题的唯一方法是在我的代码中添加以下行,以便在新视图中翻转:

[coming.view setFrame:CGRectMake(0, 0, 480, 300)];

任何人都知道为什么我需要这样做?只是因为iPhone假设加载的视图是300x480,除非转换应用于它们吗?

感谢。

PS。如果我不调用setFrame,这就是视图的样子,如上所述:

alt text http://files.me.com/mahboud/ljhvun

在第一个之后加载的所有viewcontrollers将同样挤压他们的屏幕。出于某种原因,第一个viewcontroller没有这个问题。

4 个答案:

答案 0 :(得分:1)

我认为您希望在应用中的每个视图中使用横向模式。你也希望笔尖也是横向模式。您可以在nib中将视图的大小调整为(状态栏为0,0,480,300,非状态栏为320)。并设计你想要的。最后,在视图控制器中返回no for autorotate。最后转换视图并旋转。

答案 1 :(得分:1)

我遇到了类似的问题,在SO上问了问题,然后想出来并自己回答。你可能想看一下。

答案 2 :(得分:0)

正确的答案取决于你是如何强迫横向风格的。如果你通过UIViewController和公司这样做,它应该相对简单;对于其他方法可能更复杂。

在简单的情况下,您应该能够覆盖视图控制器上的shouldAutorotateToInterfaceOrientation:,在Interface Builder中设置视图,并在信息中将UIInterfaceOrientation键设置为UIInterfaceOrientationLandscapeRight。 plist并设置。

答案 3 :(得分:0)

我修复此问题的一个简单方法是让我的根视图控制器子类UINavigationController,并实现shouldAutorotateToInterfaceOrientation来处理横向视图,即

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
            (interfaceOrientation == UIInterfaceOrientationLandscapeRight));
}

推送到导航控制器的每个视图控制器似乎也都以横向显示。