如何在已模态弹出的ViewController B内部修改modalPresentationStyle为全屏
原因
modalPresentationStyle 属性仅在控制器被模态弹出之前配置才会生效,已经完成呈现的控制器修改该属性不会触发界面更新,所以你写的代码没有效果。
正确实现方案
如果需要保留当前控制器B的已有状态(比如用户已经输入的内容、页面操作进度等),可以先无动画关闭当前B,再重新以全屏样式弹出,用户不会感知到中间的关闭过程:
@IBAction func addBtnPressed(_ sender: UIButton) { guard let presentingVC = presentingViewController else { return } // 先无动画关闭当前已弹出的B dismiss(animated: false) { [weak self] in guard let self = self else { return } // 重新设置弹出样式为全屏 self.modalPresentationStyle = .fullScreen // 可选:修改转场动画效果,默认是.coverVertical从下往上弹出 self.modalTransitionStyle = .crossDissolve // 用弹出B的原控制器A,再次弹出B presentingVC.present(self, animated: true) } }
可选方案
如果你不需要保留B的当前状态,也可以直接创建全新的B实例,设置全屏样式后由A弹出即可。
内容的提问来源于stack exchange,提问作者Palwandew
相关产品推荐
相关产品推荐

