ios - 处理 iPhoneX 的自定义标签栏
问题描述
我正在创建一个自定义标签栏。我正在努力将它正确放置在视图控制器中,以便它很好地适合 iPhoneX 和带有主页按钮的 iPhone。
当我使用SafeAreaLayoutGuide
将它锚定在底部时,我得到以下结果:
iPhone X:
带主页按钮的 iPhone:
当我使用bottomAnchor
视图时:
在代码中,我有一个自定义栏视图,我将其添加为子视图并添加约束以将其固定在底部:
let tabView = WoofTabBarView(barItems: barItems)
tabView.backgroundColor = UIColor.white
tabView.delegate = self
tabView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(tabView)
NSLayoutConstraint.activate([
tabView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
tabView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
tabView.topAnchor.constraint(equalTo: tabContainerView.bottomAnchor),
tabView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor),
tabView.heightAnchor.constraint(equalToConstant: 60.0)
])
我可以使用一些技巧来修复它,比如添加视图以覆盖底部,或检查设备版本等,但我希望我tabbarview
的班级足够聪明,可以自行处理它,而不是依赖于tabbarviewcontroller
修复它。
为了更好地理解代码,你可以查看 Github 上的 repo: WoofTabBarController
解决方案
试试下面的代码:
将 tabView 的类替换为
WoofTabBarView
let parentView = UIView()
parentView.backgroundColor = UIColor.green
parentView.translatesAutoresizingMaskIntoConstraints = false
let tabView = UIView()
parentView.addSubview(tabView)
tabView.backgroundColor = UIColor.red
tabView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(parentView)
NSLayoutConstraint.activate([
parentView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
parentView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
parentView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor), // Add parentView's Bottom Constraint to View's Bottom
tabView.topAnchor.constraint(equalTo: parentView.topAnchor),
tabView.heightAnchor.constraint(equalToConstant: 60.0),
tabView.leadingAnchor.constraint(equalTo: parentView.leadingAnchor),
tabView.trailingAnchor.constraint(equalTo: parentView.trailingAnchor),
tabView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor) // Add tabView bottom constraint to Safe Area
])
推荐阅读
- javascript - 如何在 laravel 中播放和下载数据库中的音频
- arrays - Angular 8:如何过滤 localStorage 中的 JSON 数据
- php - 从 Mysql 数据库获取数据到 Android
- qt - 将按钮链接到 QDoubleSPinBox uisng 插槽
- php - 当我在公共目录中读取 HTML 文件时,Laravel 不会公开读取 HTML 文件旁边的 JS 文件
- ruby-on-rails - 如何使用主动存储变体创建不同的图像格式
- java - 如何处理 JSqlParser 上的 '[ ] -' 字符
- sqlite - 如何在 UWP 应用程序中访问我的应用程序文件夹之外的文件(如 SQLite 数据库)?
- javascript - 如何在react-vis条形图中的每个条形上方给出值?
- java - 创建具有不同请求类型的请求数据类