You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS如何强制指定view controller仅正向竖屏、禁止旋转至倒置状态

iOS部分UIViewController仅支持正向竖屏实现方案

基础实现步骤

  • 首先确认项目全局方向配置:打开Xcode项目的General-Deployment Info-Device Orientation,勾选你需要全局支持的方向即可,哪怕全局勾选了倒置竖屏也不影响后续单个VC的限制逻辑
  • 给需要锁定正向竖屏的ViewController重写方向控制属性

    Swift 代码示例

    // 仅支持正向竖屏(Home键在设备底部)
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return .portrait
    }
    // 禁止自动旋转
    override var shouldAutorotate: Bool {
        return false
    }
    

    Objective-C 代码示例

    - (UIInterfaceOrientationMask)supportedInterfaceOrientations {
        return UIInterfaceOrientationMaskPortrait;
    }
    - (BOOL)shouldAutorotate {
        return NO;
    }
    

容器VC嵌套场景适配

如果需要锁定方向的VC嵌套在UINavigationController或者UITabBarController中,需要子类化容器VC,优先取当前展示的子VC的方向配置,以UINavigationController为例:

class CustomNavigationController: UINavigationController {
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return topViewController?.supportedInterfaceOrientations ?? .all
    }
    override var shouldAutorotate: Bool {
        return topViewController?.shouldAutorotate ?? true
    }
}

进入VC时强制切到正向竖屏

如果需要进入指定VC时立刻切换到正向竖屏,可在VC的viewWillAppear生命周期中添加如下代码:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if #available(iOS 16.0, *) {
        self.setNeedsUpdateOfSupportedInterfaceOrientations()
        UIApplication.shared.connectedScenes
            .filter { $0.activationState == .foregroundActive }
            .compactMap { $0 as? UIWindowScene }
            .first?.requestGeometryUpdate(.iOS(interfaceOrientations: .portrait))
    } else {
        UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
    }
}

注意:UIInterfaceOrientationMask.portrait对应的就是物理Home键在底部的正向竖屏,portraitUpsideDown才是倒置竖屏,仅返回前者即可自动禁止倒置竖屏的旋转选项,单个VC的方向配置优先级高于项目全局配置。

内容的提问来源于stack exchange,提问作者Vinh Hung Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:36:05