在视图中锁定纵向? IOS 7

Posted

技术标签:

【中文标题】在视图中锁定纵向? IOS 7【英文标题】:Locking Portrait Orientation in View? iOS 7 【发布时间】:2013-11-07 03:33:56 【问题描述】:

所以,我想将主页的方向锁定为纵向,并且仅限主页。

我正在使用标签栏控制器,所以初始视图是标签控制器,但首先出现的视图控制器是第一个标签,例如主页。

我想这样当用户旋转设备时,它不会在此页面上旋转到横向。但是所有其他页面都可以旋转。

我四处搜索,似乎没有什么是针对 ios 7 的,而针对 iOS 7 的那个不起作用……

请帮忙,谢谢!

下图描述了我不想在这个页面上发生的事情。

【问题讨论】:

***.com/questions/12520030/… @yen,我试过了,它在 HomePage.m 文件中不起作用,它是我想要锁定方向的唯一页面。谢谢。 【参考方案1】:

在您的实施中实施以下内容

- (NSUInteger) supportedInterfaceOrientations 

    return UIInterfaceOrientationMaskPortrait;


这应该会给你你正在寻找的结果!

【讨论】:

实施是什么意思?我要锁定的页面的视图控制器?谢谢。 是的,您正在使用的视图控制器的 .m 文件 只有当我把它放在 TabController 的 .m 文件中时它才有效,这反过来又限制了每一页的旋转。当我把它放在我的 HomePage.m 文件中时,它什么也没做。【参考方案2】:

使用此代码

@implementation UINavigationController (Rotation_IOS6)

-(BOOL)shouldAutorotate


    return UIInterfaceOrientationMaskPortrait;



-(NSUInteger)supportedInterfaceOrientations


  return UIInterfaceOrientationMaskPortrait;



- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation


 return UIInterfaceOrientationPortrait;



@end

【讨论】:

当我将它粘贴到我的 HomePage.m 视图控制器文件中时,此代码不起作用。它仅在我将其粘贴到控制所有页面的 TabController.m 时才有效,这意味着每个页面都被锁定为纵向,这不是我想要的。这似乎是标签控制器的问题。 -(BOOL)shouldAutorotate中返回UIInterfaceOrientationMaskPortrait是没有意义的。 shouldAutorotate 应该返回 YES【参考方案3】:

问题是,正如您正确指出的那样,您的主页选项卡不是最顶层的视图控制器。

根据我对这个主题的有限知识,我只能想到以下几点:

    创建另一个标签视图控制器并实现控制方向的方法,即shouldAutorotatesupportedInterfaceOrientations; 将此控制器设为启动时的第一个控制器; 使用 push segue 将其他选项卡向下路由到原始选项卡控制器(支持所有方向的控制器)。

【讨论】:

【参考方案4】:

我想我找到了一个不错的解决方案。 好吧,就我而言,我在故事板中使用 UISplitViewController 作为 rootController,但想法是一样的。

    对您的 rootController(在我的情况下为 UISplitViewController)进行子类化并捕获 shouldAutorotate() 回调,以便您可以从那里调用子视图 shouldAutorotate。

    在要锁定旋转的视图中实现 shouldAutorotate()

    class MyUISplitViewController: UISplitViewController 
    override func shouldAutorotate() -> Bool 
        if ((self.viewControllers.last) != nil && (self.viewControllers.last!.topViewController) != nil)
            if (self.viewControllers.last!.topViewController!.respondsToSelector("shouldAutorotate"))
            
                return self.viewControllers.last!.topViewController!.shouldAutorotate()
            
        
        return true
    
    
    

在您的子 UIViewController 中

override func shouldAutorotate() -> Bool 
        if (UIDevice.currentDevice().userInterfaceIdiom == .Phone)
        
            return false
        else
            return true
        
    

如果你想检查支持的方向,你可以简单地使用 supportedsupportedInterfaceOrientations()

编辑:

不要忘记在 Storyboard 根 viewController 中设置“MyUISplitViewController”类

【讨论】:

以上是关于在视图中锁定纵向? IOS 7的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 7 和 iOS 8 中锁定设备方向

在 iOS 14 中锁定屏幕方向

如何将视图从纵向模式更改为横向模式并锁定它?

锁定视图以最初在横向(仅横向)目标-C 中启动

iOS 7 – 隐藏的输入附件视图显示在 bannerViewActionShouldBegin:willLeaveApplication: 之后

如何在 iOS 中支持横向和纵向视图?