标签栏重叠视图在后面

时间:2018-11-05 07:38:53

标签: ios swift autolayout

我似乎无法解决以下问题:我将Tab Bar的高度从viewWillLayoutSubviews()调整为60,但是覆盖视图似乎无法确认已调整的高度并紧随其后。

我发现的其他类似问题实际上并不相似(请参见此处:iOS 7 Custom TableView Is Under TabBar),因为它们的标签栏是半透明的,而我的不是。

这是我到目前为止实现的:

使用我的自定义UITabBarController

override func viewWillLayoutSubviews() {
    var newTabBarFrame = tabBar.frame
    let newTabBarHeight: CGFloat = 60
    newTabBarFrame.size.height = newTabBarHeight
    newTabBarFrame.origin.y = self.view.frame.size.height - newTabBarHeight
    tabBar.frame = newTabBarFrame
}

在我的某个标签的UIViewController中:

override func viewDidLoad() {
    view.addSubview(tableView)
    NSLayoutConstraint.activate([
        NSLayoutConstraint(item: tableView, attribute: NSLayoutAttribute.leading, relatedBy: .equal, toItem: view, attribute: NSLayoutAttribute.leading, multiplier: 1, constant: 0),
        NSLayoutConstraint( item: tableView, attribute: NSLayoutAttribute.top, relatedBy: .equal, toItem: view, attribute: NSLayoutAttribute.top, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: tableView, attribute: NSLayoutAttribute.trailing, relatedBy: .equal, toItem: view, attribute: NSLayoutAttribute.trailing, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: tableView, attribute: NSLayoutAttribute.bottom, relatedBy: .equal, toItem: view, attribute: NSLayoutAttribute.bottom, multiplier: 1, constant: 0)
        ])
}

这是当前结果: Here您可以看到重叠视图部分被遮挡。这会在所有其他标签的覆盖视图控制器上发生

顺便说一句,我已经确定表视图的translatesAutoresizingMaskIntoConstraints设置为false

1 个答案:

答案 0 :(得分:0)

您可以使用自定义UITabBar来执行此操作。只需覆盖sizeThatFits(_:)即可使用您的自定义高度:

class TabBar: UITabBar {

    private let height:CGFloat = 60

    override func sizeThatFits(_ size: CGSize) -> CGSize {
        var bottomSafeAreaInsets: CGFloat = 0
        if #available(iOS 11.0, *) {
            bottomSafeAreaInsets = UIApplication.shared.keyWindow?.safeAreaInsets.bottom ?? 0
        }
        return CGSize(width: size.width, height: height + bottomSafeAreaInsets)
    }
}