2009-09-03 29 views
3

我有两个应用程序,这两个应用程序都强制用户在横向模式下使用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没有这个问题。

+0

我可以确认这仍然是iPhone OS 3.1.3的问题。由于我的ADC会员资格中包含两项免费支持事件,所以我已经提交了一份,并在有任何消息时通知您。 –

回答

0

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

在简单情况下,你应该能够覆盖shouldAutorotateToInterfaceOrientation:您的视图控制器,设置您在Interface Builder意见,并在你的Info.plist的UIInterfaceOrientation键设置为UIInterfaceOrientationLandscapeRight和设置。

+0

UIInterfaceOrientationLandscapeRight在info.plist中设置,所以应用程序将从这个方向开始。 NIB中的所有内容都以相同的方向设置。不过,第二个和下一个视图需要按照上面的设置来设置其视图大小,以便他们正确显示其内容。 – mahboudz

1

我想你想在你的应用程序的每个单一视图中使用横向模式。你也想让笔尖成为风景模式。您可以调整视图的大小(状态栏为0,0,480,300,非状态栏为320)。并设计你想要的。最后,在视图控制器中为autorotate返回no。最后转换视图并旋转。

+0

我改变了我所有的 \t回报((interfaceOrientation == UIInterfaceOrientationLandscapeLeft)|| \t \t \t \t(interfaceOrientation == UIInterfaceOrientationLandscapeRight)); 将返回NO代替所有情况。该应用程序以纵向模式显示所有视图。 – mahboudz

+2

您不应该为'shouldAutorotate'返回NO。返回NO意味着你不希望处于任何方向,这是不可能的。 UIKit会在控制台中记录警告,你应该检查它。相反,您想要的方向返回YES。 –

1

我有一个类似的问题,询问SO的问题,然后找出答案并自己回答。你可能想看看它。

+0

粘土的解决方案对我很好。 –

0

一个简单的方法,我解决了这个问题是有我的根视图控制器子类的UINavigationController,并实现shouldAutorotateToInterfaceOrientation处理横向视图即

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

每个视图控制器推送到导航控制器,似乎出现在景观也。

相关问题