UIProgressView 约束问题
Posted
技术标签:
【中文标题】UIProgressView 约束问题【英文标题】:UIProgressView constraints issue 【发布时间】:2015-03-29 19:37:21 【问题描述】:我有一个 UIProgressView,它以编程方式添加到情节提要视图以及将其放置在导航栏底部的约束。有一个菜单,打开时会暂时隐藏导航栏,关闭时会再次取消隐藏。打开和关闭此菜单后,UIProgressView 上的约束将其放置在窗口的最顶部,因此它会被导航栏隐藏。因此,在隐藏导航栏时,布局和约束似乎正在重新计算和应用。导航栏取消隐藏后如何强制应用约束?我试过 layoutIfNeeded 无济于事。此外,了解视图层次结构有点困难,因为视图是嵌入在导航控制器中的故事板放置视图,但该视图的自定义视图控制器从 xib 加载自己的视图。关于如何强制应用约束和破译视图层次结构的任何想法?
【问题讨论】:
【参考方案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])
【讨论】:
看起来答案很快,而我使用的是 obj-c。但是,这是旧的,所以我继续接受。以上是关于UIProgressView 约束问题的主要内容,如果未能解决你的问题,请参考以下文章