You need to enable JavaScript to run this app. 如何获取modal presented视图控制器的根视图高度?
优惠活动
大模型
产品
解决方案
定价
更多

如何获取modal presented视图控制器的根视图高度?

解决方案

首先明确:不存在直接返回当前视图控制器可用视图高度的全局系统宏/变量,但可以通过以下两种不依赖AutoLayout的方案拿到准确值:

方案1:调用视图控制器自带属性获取

你可以直接使用视图控制器自带的view.bounds.size.height属性,它返回的就是当前控制器根视图的实际高度,已经自动扣除了状态栏、导航栏、底部TabBar、安全区等系统组件的占用高度,完全不需要依赖AutoLayout。

调用时机要求

  • 不要在控制器的init初始化阶段调用,此时根视图还未完成加载,拿到的是默认错误值
  • 在viewDidLoad执行结束后,比如viewWillAppear生命周期方法内调用,就能拿到准确值

方案2:手动提前计算高度

如果你需要在控制器初始化阶段就提前拿到高度用来布局,可以手动拼接系统组件的高度计算,公式如下:
可用布局高度 = 屏幕总高度 - 状态栏高度 - 导航栏高度 - 底部TabBar高度(如有) - 底部安全区高度
所有参数都可以通过系统API直接获取,不需要依赖AutoLayout:

  • 屏幕总高度:UIScreen.main.bounds.size.height
  • 状态栏高度:UIApplication.shared.statusBarFrame.size.height(OC写法为[UIApplication sharedApplication].statusBarFrame.size.height)
  • 导航栏高度:如果控制器在导航栈内,可通过navigationController.navigationBar.frame.size.height获取
  • 底部TabBar高度:如果控制器在TabBar控制器内,可通过tabBarController.tabBar.frame.size.height获取
  • 底部安全区高度:UIApplication.shared.keyWindow.safeAreaInsets.bottom

补充说明

如果你需要的是类似Settings页面的整个列表滚动内容的总高度,没有现成的系统变量可以直接返回,需要你自己累加每个cell、分区头、分区尾的高度总和得到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 03:15:03