2

我还应该做什么?

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

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutoRotate
{
    return NO;
}

我的 viewController 仍然旋转。


它嵌入在导航堆栈中。如果我将 UINavigationController 子类化,并在那里实现相同的仅纵向模板,并将我的 viewController 嵌入到经过调整的 navigationController 中,那么它就可以工作,但我无意在 UINavigationController 出现的任何地方重写我的代码。

这里的最佳做法是什么?

4

2 回答 2

6

原始答案:无需子类化 - 只需像我在此处的解决方案中描述的那样做一个类别: iOS6 模拟器中的顶部主页按钮纵向方向不起作用

基本上,对于 iPhone,UINavigationController 允许旋转除“顶部主页按钮肖像”之外的所有内容,对于 iPad,它允许所有内容。

所以要么你做一个类别将决定转发给当前活动的视图控制器,要么像静态的东西

UINavigationController-Rotation.h:

@interface UINavigationController (Rotation)
@end

UINavigationController-Rotation.m:

#import "UINavigationController-Rotation.h"

@implementation UINavigationController (Rotation)

#pragma From UINavigationController

- (BOOL)shouldAutorotate {

    return NO;
}

- (NSUInteger)supportedInterfaceOrientations {

    return UIInterfaceOrientationMaskPortrait;
}

#pragma -

@end

更新:正如 Javier Soto 指出的那样,如果有第二个类别做同样的事情,这可能会导致未定义的行为。在这种情况下,子类化可能是更好的解决方案。

在您知道没有其他类别在做同样的事情的情况下,我仍然认为这是一个可行的、省力的、本地的和务实的解决方案。我对此并不虔诚。自己决定。

于 2012-10-18T12:49:57.757 回答
3

您应该从任何地方继承UINavigationController并使用您的自定义。这不是很多工作(只需搜索UINavigationController代码中的出现)。这将变得更加灵活,因为您可以在必要时自定义其他内容。

永远不要像其他响应所暗示的那样在覆盖主类中的方法的类别中执行此操作。

于 2013-07-11T20:23:36.853 回答