ios - 为 iPhone X 处理自定义标签栏

标签 ios swift autolayout iphone-x

我正在创建一个自定义标签栏。我正在努力将它正确地放置在 View Controller 中,以便它适合 iPhoneX 和带有主页按钮的 iPhone。

当我使用 SafeAreaLayoutGuide 将其锚定在底部时,我得到以下结果:

iPhone X:

iphonex

带主屏幕按钮的 iPhone:

iphone_home_button

当我使用 View 的 bottomAnchor 时:

iphonex_clipped

在代码中,我有一个自定义条形 View ,我将其添加为 subview 并添加约束以将其固定在底部:

    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)
    ])

我可以使用一些 hack 来修复它,比如添加 View 以覆盖底部,或者检查设备版本等。但我希望我的 tabbarview 类足够智能,可以自行处理它依靠 tabbarviewcontroller 来修复它。

为了更好地理解代码,您可以查看 Github 上的 repo: WoofTabBarController

最佳答案

试试下面的代码:

Replace tabView's class to with 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
])

iPhone X iPhone SE

关于ios - 为 iPhone X 处理自定义标签栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59101064/

相关文章:

ios - 无法解决CoreFoundation对象中的内存泄漏

ios - 是否可以在一个 XIB 中有两个 TableView ?

ios - 获取错误 "Cannot load module ' MapKit' 作为 'MapKit'“

ios - 视觉格式化语言、按钮宽度和高度约束

ios - setNeedsLayout 和 setNeedsDisplay

ios - NSLayoutdString的AutoLayout行高计算错误

iOS吊销证书会影响App Store的推送通知吗?

iphone - 我可以重用 UIView 吗?

swift - 保存到本地数据库图形?

swift - Swift 中的字符串操作