在导航控制器中的导航栏下方添加视图

时间:2019-06-24 10:31:09

标签: ios swift autolayout uinavigationbar

我正在尝试在UIView的{​​{1}}下添加UINavigationBar。 该视图将用作信息消息的占位符(例如,如果我们遇到问题并且内容没有更新)。

自行添加视图并设置其约束不是问题,但是它与导航控制器中包含的视图内容重叠了,这是我不想要的。如何设置所包含的ViewController的内容以尊重此新视图所占用的空间?

屏幕截图显示了我的自定义(橙色)视图,该视图与推送到导航控制器上的viewController的内容重叠。

enter image description here

1 个答案:

答案 0 :(得分:0)

尝试对UINavigationController进行子类化,然后向其中添加橙色视图的高度约束。并在需要时调用该函数

import UIKit
class CustomNavigationController: UINavigationController{

    @IBOutlet weak var topViewHeight: NSLayoutConstraint!

    func animateHeight(height: CGFloat){
        UIView.animate(withDuration: 0.2) {
            self.viewControllers.forEach{ vc in
                let v = vc.view.frame
                vc.view?.frame = CGRect(x: 0, y: height, width: v.width, height: v.height)
            }
            self.topViewHeight.constant = height
        }
    }
}

如何使用? 在您要显示/隐藏它的VC中:

(self.navigationController as? CustomNavigationController)?.animateHeight(height: 50)