我正在创建自定义标签栏。而且,我正在努力将其正确放置在视图控制器中,以使其能够很好地适合iPhoneX和带有Home按钮的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
类足够智能以自行处理它,而不是依靠[C0 ]进行修复。
为了更好地理解代码,您可以在Github上查看存储库:tabbarviewcontroller
尝试以下代码:
将tabView的类替换为WoofTabBarController
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
])