2011-08-28 87 views
1

我有一个UIViewController与连接到几个UIViews的IBOutlets。各种按钮在视图之间切换,但是当我为控制器设置新视图时会出现问题。控制器和视图都处于横向模式,但在第一对开关后,某些视图以纵向模式显示。什么可能导致这种情况?切换视图控制器视图时出现奇怪的行为?

+0

只是猜测,viewWillAppear的默认实现中有代码检测方向并为横向模式准备视图。如果在改变视图之前,你会调用新视图的viewWillAppear? – morningstar

+0

UIView没有-viewWillAppear方法。我做了你用UIViewController的-viewWillAppear建议的,但没有改变。 – Jumhyn

+0

你的所有观点都应该是在风景中,还是在肖像中的一些? – msgambel

回答

-1

检查是否已在所有视图中启用这种方法:

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

此外,有你在模拟器或设备上看到了什么?

+0

两者以及如何将该方法添加到UIView? – Jumhyn

+0

您只需将此代码复制并粘贴到每个视图控制器以使其生效。 – TommyG

+0

是的,我已经在UIViewController中有它。我只是不明白你的意思添加到视图。任何其他想法? – Jumhyn

2

您应该检查您的所有UIViewControllers实施方法shouldAutorotateToInterfaceOrientation。该方法告诉操作系统在哪个位置(屏幕方向)UIViews由该控制UIViewControllers可以显示。

如果要将所有视图仅以横向显示,那么该方法仅应返回YESinterfaceOrintation == UIInterfaceOrientationLandscapeLeftinterfaceOrintation == UIInterfaceOrientationLandscapeRight。如果你只想要肖像方向,那么interfaceOrintation == UIInterfaceOrientationPortrait

例如(只支持横向模式):

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

而且你应该检查你的项目设置,设置适当的支持的设备取向(又称支持的接口方向)。

+0

是的,我已经完成了所有这些。正如我所说,它显示一次罚款,然后几个开关后停止工作。 – Jumhyn

0

我认为你应该在IB中将视图设置为横向模式。如果这已经完成,那么我会建议不要明确地更改视图控制器的视图。实现一种可以改变视图的方法。
详细信息:
将视图设置为您的视图控制器的视图,然后每个其他视图应该是此视图的子视图。您可以通过移除所呈现的视图并添加新视图或其他方法来实现视图更改,从而将所有视图添加到IB中作为子视图,隐藏所有视图,然后在想要更改时取消隐藏所需视图并隐藏所有其他。
我希望你能理解我的方法,如果不是,那么我在这里回答你的问题。
这种方式很容易实现。 :)

+0

我尝试了删除和添加子视图的方式,尽管我喜欢隐藏和取消隐藏视图的方法。我会明天尝试,如果它有效,在赏金到期前回到这里:P – Jumhyn

+0

那么,它不起作用? –

+0

不,对不起。由于这种情况非常特殊,我想不适合寻求一些真实世界的帮助。 – Jumhyn

-1

这可能是一个模拟器错误,但尝试使用单独的UIViewController对象为每个视图,而不是一个控制器的所有视图。就我个人而言,我从来没有遇到任何方向上的困难,但我以编程方式做事。我建议你也这样做(你可能不需要转换所有程序的xib文件,但可能只是你遇到问题的那个)。只要确保你用于该视图的所有UIViewController都有:shouldAutorotateToInterfaceOrientation就可以正确设置,并且事情应该可以正常工作。

希望这会有所帮助。

+0

不要重复回答 – Nekto