如何解决无法同时满足的约束
我与coustom试图限制如何解决无法同时满足的约束
MenuBar类:
import UIKit
class ManuBar: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.blueColor()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension UIView {
func addConstraintsWithFormat(format: String, views: UIView...) {
var viewsDictionary = [String: UIView]()
for (index, view) in views.enumerate() {
let key = "v\(index)"
view.translatesAutoresizingMaskIntoConstraints = false
viewsDictionary[key] = view
}
addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(format, options: NSLayoutFormatOptions(), metrics: nil, views: viewsDictionary))
}
}
视图控制器:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
setupManuBar();
}
let menuBar : ManuBar = {
let mb = ManuBar()
return mb
}()
private func setupManuBar(){
view.addSubview(menuBar)
view.addConstraintsWithFormat("H:|[v0]|",views : menuBar)
view.addConstraintsWithFormat("V:|-16-[v0(40)]|",views : menuBar)
}
}
无法同时满足约束条件。
以下列表中的至少一个约束可能是您不想要的约束之一。
试试这个: (1)看看每个约束,并试图找出你不期望的;
(2)发现,增加了不必要的约束或
constraints and fix it.
(
"<NSLayoutConstraint:0x7ff891d27c70 V:|-(16)-[Tab_Menu_Bar_Programmatically.ManuBar:0x7ff891d19f30] (Names: '|':UIView:0x7ff891d1b570)>",
"<NSLayoutConstraint:0x7ff891d27f40 V:[Tab_Menu_Bar_Programmatically.ManuBar:0x7ff891d19f30(40)]>",
"<NSLayoutConstraint:0x7ff891d0fc50 V:[Tab_Menu_Bar_Programmatically.ManuBar:0x7ff891d19f30]-(0)-| (Names: '|':UIView:0x7ff891d1b570)>",
"<NSLayoutConstraint:0x7ff891d1c8e0 'UIView-Encapsulated-Layout-Height' V:[UIView:0x7ff891d1b570(736)]>"
)
将尝试如果打破约束
恢复的代码你需要更多的信息,让我知道
你忘视图在view.translatesAutoresizingMaskIntoConstraints = false
,因此要设置在电池,而不是对个人意见translatesAutoresizingMaskIntoConstraints。
更改for循环
for (index, view) in views.enumerate(){
let key = "v\(index)"
view.translatesAutoresizingMaskIntoConstraints = false
viewsDictionry[key] = view
}
我还要加上懒惰关键词看lazy loading的意见。
更新:
您显著改变你的代码虽然。我测试了你的第一个例子,它工作。你的问题现在是:view.addConstraintsWithFormat("V:|-16-[v0(40)]|",views : menuBar)
你基本上设置菜单栏的高度两次。您将它设置为固定高度,但是您也可以根据超级景观来使其伸展。 像素顶部空间+ 0像素在底部。取下|
末
像这样:
view.addConstraintsWithFormat("H:|[v0]|",views : menuBar)
view.addConstraintsWithFormat("V:|-16-[v0(40)]",views : menuBar)
无法正常工作并更新我的代码 –
是的,重大更改,对不起!当我删除|在结束时然后抛出异常 –
是的工作谢谢 –
我会考虑为缩略图图像添加高度限制。查看不完全满足的垂直或水平约束,并确保每个视图具有定义的大小和位置。如果您使用布局文件,还要确保没有冲突的约束。
请发表你的约束截图你的问题。如果你不知道如何做到这一点,请告诉我。 –
@DanLevy更新我的代码 –