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

如何用viewWillTransitionToSize替代废弃的didChangeStatusBarOrientationNotification

替换废弃的didChangeStatusBarOrientationNotification方案

1. 移除旧的通知监听代码

先删掉viewDidLoad里的通知注册逻辑:

override func viewDidLoad() {
    super.viewDidLoad()
    // 移除这行废弃的通知监听代码
    // NotificationCenter.default.addObserver(self, selector: #selector(self.orientationChanged), name: UIApplication.didChangeStatusBarOrientationNotification, object: nil)
}

2. 重写viewWillTransition(to:with:)方法

直接在你的ViewController里实现这个系统方法,替代原orientationChanged的功能:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    
    // 把原来@objc func orientationChanged里的约束调整逻辑直接移到这里
    // 示例:
    adjustLayoutConstraintsForNewSize(size)
    
    // 如果需要让约束调整和屏幕旋转动画同步,添加以下代码
    coordinator.animate(alongsideTransition: { _ in
        self.view.layoutIfNeeded()
    }, completion: nil)
}

3. 清理旧方法

如果orientationChanged方法只用于横竖屏切换触发,现在可以直接删掉这个带@objc标记的方法;如果还有其他业务场景需要调用,保留即可,但横竖屏切换的触发逻辑已经由上面的方法接管。

补充说明

viewWillTransition(to:with:)是苹果官方推荐的横竖屏切换监听方案,它会在屏幕尺寸变化(包含横竖屏切换)时提前触发,能直接获取新的屏幕尺寸,还可以通过转场协调器coordinator让布局调整和系统旋转动画同步,避免布局突兀变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:51:32