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

iPhone X中preferredInterfaceOrientationForPresentation失效,横屏VC显示求助

解决iPhone X上模态视图控制器横屏失效的问题

我之前也踩过一模一样的坑!iPhone X这类全面屏设备的界面方向适配确实有特殊的约束,核心是系统对模态视图的展示样式和方向控制逻辑更严格。下面是亲测有效的解决方案:

步骤1:全局方向兜底控制(AppDelegate中)

先确保全局默认保持竖屏,但允许目标横屏VC突破这个限制:

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    // 获取当前最上层的弹出视图控制器
    guard let topVC = window?.rootViewController?.presentedViewController else {
        // 无弹出VC时,全局保持竖屏
        return .portrait
    }
    
    // 判断是否是需要横屏的目标VC
    if topVC is YourLandscapeViewController {
        // 允许它使用指定的横屏方向
        return .landscapeLeft
    }
    
    // 其他弹出VC保持竖屏
    return .portrait
}

步骤2:横屏VC的方向配置优化

在你的目标横屏VC里,补充shouldAutorotate属性,并明确指定支持的方向(别用all,避免不必要的兼容问题):

override var shouldAutorotate: Bool {
    return true
}

override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    return .landscapeLeft
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .landscapeLeft
}

步骤3:调整模态弹出样式(关键!)

iPhone X上默认的模态样式(比如pageSheet)会被系统强制限制为竖屏,所以弹出这个VC时必须设置全屏展示:

// 创建横屏VC实例
let landscapeVC = YourLandscapeViewController()
// 设置全屏模态样式,让VC能完全掌控方向
landscapeVC.modalPresentationStyle = .fullScreen
// 弹出视图控制器
present(landscapeVC, animated: true)

为什么iPhone X会出现这个问题?

iPhone X及之后的全面屏设备,系统默认的模态展示样式是pageSheet,这种样式下系统会优先保持竖屏布局逻辑,即使你在VC里重写了方向相关属性也会被忽略。改成fullScreen后,VC才能完全掌控自己的界面方向。

按上面的步骤配置后,全局依然保持竖屏,只有这个特定VC弹出时会强制切换到横屏,返回后自动恢复竖屏,所有设备(包括iPhone X)都能正常工作啦!

内容的提问来源于stack exchange,提问作者crysis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:54:37