我正在尝试制作一个 View ,该 View 将充当一种“面板”,附加到 View Controller 的右侧。
即绑定(bind)到父 View Controller 的尾边距、上边距和下边距,静态宽度为300
但是,我似乎无法正确处理,我要么打破约束,要么做一些 xcode 告诉我是非法的事情。
我做错了什么?
Controller 中的代码
let myView = UIView()
view.backgroundColor = UIColor.redColor()
self.view.addSubview(view)
let topConstraint = NSLayoutConstraint(item: myView,
attribute: .Top,
relatedBy: .Equal,
toItem: self.topLayoutGuide,
attribute: .Bottom,
multiplier: 1,
constant: 0)
let trailingConstraint = NSLayoutConstraint(item: self.view,
attribute: .TrailingMargin,
relatedBy: .Equal,
toItem: myView,
attribute: .Trailing,
multiplier: 1,
constant: 0)
let bottomConstraint = NSLayoutConstraint(item: self.bottomLayoutGuide,
attribute: .Top,
relatedBy: .Equal,
toItem: myView,
attribute: .Bottom,
multiplier: 1,
constant: 0)
let widthConstraint = NSLayoutConstraint(item: myView,
attribute: .Width,
relatedBy: .Equal,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 1,
constant: 300)
self.view.addConstraints([trailingConstraint])
view.addConstraints([topConstraint, bottomConstraint, widthConstraint])
最佳答案
实际上,您的代码中的问题是您没有将 myview
的 translatesAutoresizingMaskIntoConstraints
设置为 false
,每当您想使用自动 -布局约束,那么您必须将 View 的 translatesAutoresizingMaskIntoConstraints
设置为 false。
另一个问题是你没有在 self.view 上添加 myview
我已经更新了你的代码并且它工作正常根据你的约束。
将以下代码放入您的 ViewController 中。
let myView = UIView()
myView.backgroundColor = UIColor.redColor()
self.view.addSubview(myView)
myView.translatesAutoresizingMaskIntoConstraints = false
view.addConstraint(NSLayoutConstraint(item: myView, attribute: .Top, relatedBy: .Equal, toItem: self.topLayoutGuide, attribute: .Bottom, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: myView, attribute: .Bottom, relatedBy: .Equal, toItem: self.bottomLayoutGuide, attribute:.Top, multiplier: 1, constant: 20))
view.addConstraint(NSLayoutConstraint(item: myView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute,multiplier: 1, constant: 300))
view.addConstraint(NSLayoutConstraint(item: myView, attribute: .TrailingMargin, relatedBy: .Equal, toItem: view, attribute: .TrailingMargin, multiplier: 1, constant: 0))
关于swift - 以编程方式创建约束以查看 Controller 边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36507043/