如何获取iOS模态弹出视图(Modal Present View)的真实高度?
获取模态弹出视图的真实高度
在viewDidLoad中打印模态视图的bounds得到全屏尺寸,是因为这个阶段视图仅完成加载,还未完成自动布局计算和实际显示布局。默认的模态视图(如sheet样式)的真实尺寸是在视图层级完成布局后才会确定的。
方法1:在viewDidLayoutSubviews中获取
viewDidLayoutSubviews会在视图完成布局(包括尺寸调整)后调用,这里能拿到模态视图的真实显示尺寸:
import UIKit class TestVC: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .gray } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() // 这里能拿到真实的模态视图bounds print("modal view real bounds is \(view.bounds)") } }
方法2:在viewDidAppear中获取
如果只需要在视图显示后获取一次尺寸,也可以在viewDidAppear中获取:
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) print("modal view real bounds in appear: \(view.bounds)") }
补充说明
- 如果是自定义模态展示样式(如修改
modalPresentationStyle),可以通过设置preferredContentSize自定义尺寸,同时也能通过该属性获取预设的尺寸。 viewDidLayoutSubviews会在视图布局发生变化时多次调用(比如屏幕旋转、子视图调整),如果只需要一次结果,可以添加判断逻辑避免重复执行。
内容的提问来源于stack exchange,提问作者mars
相关产品推荐
相关产品推荐

