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

3
我有两个应用程序,都强制用户使用横屏模式,以获得更宽的屏幕,而不是更高的屏幕。 我发现的问题之一是,我的第一个视图看起来很好,但所有其他视图都会出现子视图(UIButtons,UIPicker,UIViews)挤压到一侧或被裁剪的情况(取决于元素是否设置为随着视图大小的变化而移动、调整大小或保持原位置)。 所有的视图都是在IB中设计的横向方向。 我的底层UIWindow和我能想到的所有东西都被布置在横向方向上。即使我的plist文件设置了UIInterfaceOrientationLandscapeRight标志,也是如此。 现在,如果我在根视图控制器同时加载所有视图,那么我就没有问题。 但如果我稍后加载视图,它们就会被裁剪或挤压。 解决问题的唯一方法是在代码中添加以下行,以翻转新视图:
[coming.view setFrame:CGRectMake(0, 0, 480, 300)];

有人知道我为什么需要这样做吗?是因为iPhone认为加载的视图默认大小为300x480,除非对它们应用了变换吗?

谢谢。

附注:如果我不调用上述的setFrame方法,视图将会像这样:

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

所有在第一个视图之后加载的视图控制器都会被同样压缩。由于某种原因,第一个视图控制器没有这个问题。


我可以确认,截至 iPhone OS 3.1.3 版本,这仍然是一个问题。由于我的 ADC 会员资格包括两个免费的支持事件,我已经提交了一个,并将在有任何消息时通知您。 - Johannes Rudolph
4个回答

1

我曾经遇到过类似的问题,在SO上提问后,最终自己解决了并回答了这个问题。你可能想要去看一下。


1

我觉得你想在你的应用程序中的每个单独视图中使用横向模式。而且你也希望nib文件是横向模式。你可以在nib文件中将视图大小调整为(0,0,480,300,对于有状态栏的情况,对于没有状态栏的情况则为320)。然后设计你想要的界面。最后,在视图控制器中返回不支持自动旋转。最后,对视图进行变换和旋转。


我将所有的代码更改为以下形式:return NO;无论何种情况,应用程序都会以纵向模式启动。 - mahboudz
2
你永远不应该在“shouldAutorotate”方法中返回NO。返回NO意味着你不想在任何方向上显示界面,这是不可能的。UIKit会在控制台记录一个警告,你应该检查一下。相反,对于你想要支持的方向,应该返回YES。 - Mike Chen

0
一个合适的答案将取决于您如何强制横向方向。如果您是通过UIViewController等方式实现的,那么应该相对简单;对于其他方法可能会更加复杂。
在简单情况下,您应该能够在视图控制器上覆盖shouldAutorotateToInterfaceOrientation:,在Interface Builder中设置您的视图,并在Info.plist中将UIInterfaceOrientation键设置为UIInterfaceOrientationLandscapeRight即可完成设置。

UIInterfaceOrientationLandscapeRight 在 info.plist 中设置,因此应用程序从一开始就以该方向启动。 NIB 中的所有内容都以相同的方向设置。 但是,第二个和下一个视图仍需要将其视图大小设置为上述大小,以便它们可以正确显示其内容。 - mahboudz

0
一个简单的解决方法是让我的根视图控制器子类化UINavigationController,并实现shouldAutorotateToInterfaceOrientation来处理横向视图。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
            (interfaceOrientation == UIInterfaceOrientationLandscapeRight));
}

每个被推到导航控制器的视图控制器似乎也会以横向模式出现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接