UIProgressView约束问题

时间:2015-03-29 19:37:22

标签: ios uinavigationcontroller uiprogressview

我有一个UIProgressView,它以编程方式添加到故事板视图中,并带有将其放在导航栏底部的约束。有一个菜单,当打开时暂时隐藏导航栏,并在关闭时再次取消隐藏它。打开和关闭此菜单后,UIProgressView上的约束将其置于窗口的最顶部,然后由导航栏隐藏。因此,在隐藏导航栏时,布局和约束似乎会被重新计算和应用。在取消隐藏导航栏后,如何强制应用约束?我试过layoutIfNeeded无济于事。此外,它有点难以了解视图层次结构,因为视图是嵌入在导航控制器中的故事板放置视图,但此视图的自定义视图控制器从xib加载其自己的视图。关于如何强制应用约束和解密视图层次结构的任何想法?

1 个答案:

答案 0 :(得分:1)

没有看到您的代码很难回答。顺便说一句:

override func viewDidLoad() {
    super.viewDidLoad()

    // if VC is pushed in a navigation controller I add a progress bar
    if let navigationVC = self.navigationController {

        // create progress bar with .bar style and add it as subview
        let progressBar = UIProgressView(progressViewStyle: .Bar)
        navigationVC.navigationBar.addSubview(progressBar)

        // create constraints
        // NOTE: bottom constraint has 1 as constant value instead of 0; this way the progress bar will look like the one in Safari
        let bottomConstraint = NSLayoutConstraint(item: navigationVC.navigationBar, attribute: .Bottom, relatedBy: .Equal, toItem: progressBar, attribute: .Bottom, multiplier: 1, constant: 1)
        let leftConstraint = NSLayoutConstraint(item: navigationVC.navigationBar, attribute: .Leading, relatedBy: .Equal, toItem: progressBar, attribute: .Leading, multiplier: 1, constant: 0)
        let rightConstraint = NSLayoutConstraint(item: navigationVC.navigationBar, attribute: .Trailing, relatedBy: .Equal, toItem: progressBar, attribute: .Trailing, multiplier: 1, constant: 0)

        // add constraints
        progressBar.translatesAutoresizingMaskIntoConstraints = false
        navigationVC.view.addConstraints([bottomConstraint, leftConstraint, rightConstraint])
    }
}