将UITabBarController设为UISplitViewController主视图出现视图被裁剪问题
问题根本原因
该问题是UISplitViewController默认未正确处理内嵌子控制器的底部安全区偏移,导致内嵌的UITabBar绘制区域没有适配系统安全边距,最终出现tab bar item被底部区域裁剪的问题。
解决方案
方案1:纯Storyboard配置(无需编写代码)
- 选中项目中的
UISplitViewController,在右侧属性检查器的Presentation分类下,勾选Underlay Bottom Bars选项 - 再选中作为主视图的
UITabBarController,在右侧属性检查器的View Controller分类下,确认Extend Edges分组里的Under Bottom Bars为勾选状态 - 清理Xcode缓存后重新运行即可解决大部分场景下的裁剪问题
方案2:代码适配(方案1无效时使用)
给UITabBarController添加适配代码,在其viewDidLoad生命周期方法中加入以下代码:
// Swift 版本 edgesForExtendedLayout = .all extendedLayoutIncludesOpaqueBars = true
// Objective-C 版本 self.edgesForExtendedLayout = UIRectEdgeAll; self.extendedLayoutIncludesOpaqueBars = YES;
额外排查项
- 检查是否自定义过UITabBar的高度,自定义高度未适配安全区也会触发该问题
- 清理Xcode的DerivedData缓存后再运行,避免旧的Storyboard编译缓存导致配置不生效
问题关联截图


内容的提问来源于stack exchange,提问作者skJosh
相关产品推荐
相关产品推荐

