如何用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
相关产品推荐
相关产品推荐

