关于这个问题已经在StackOverflow上发布了几个问题,我已经阅读了很多问题,但是已发布的解决方案无法解决我的问题。
我只想在superview和它的子视图之间有一个固定的边距或4像素的填充。在调整superview的大小时,必须自动调整子视图的大小,以便在所有边上保持恒定的4像素填充。
我最初尝试在Interface Builder中为相关类的单独XIB文件执行此操作,并且我一直在输出窗口中收到冲突约束的通知。然后我决定以编程方式尝试,我仍然收到错误。
下面的代码段显示了我尝试过的几个解决方案之一。
class MapThumbnail: UIView {
let contentView = UIImageView()
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
func initialize() {
addSubview(contentView)
contentView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint(item: contentView, attribute: .Leading, relatedBy: .Equal, toItem: self, attribute: .Leading, multiplier: 1.0, constant: 4.0).active = true
NSLayoutConstraint(item: contentView, attribute: .Width, relatedBy: .Equal, toItem: self, attribute: .Width, multiplier: 1.0, constant: -8.0).active = true
NSLayoutConstraint(item: contentView, attribute: .Top, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1.0, constant: 4.0).active = true
NSLayoutConstraint(item: contentView, attribute: .Height, relatedBy: .Equal, toItem: self, attribute: .Height, multiplier: 1.0, constant: -8.0).active = true
}
}
这是我收到的输出:
无法同时满足约束条件。 可能至少下列列表中的一个约束是您不想要的约束。试试这个:(1)看看每个约束并试着找出你不期望的东西; (2)找到添加了不需要的约束或约束的代码并修复它。 (注意:如果您看到您不理解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性的文档translatesAutoresizingMaskIntoConstraints) ( “” “” ) 将尝试通过打破约束来恢复 在UIViewAlertForUnsatisfiableConstraints上创建一个符号断点,以便在调试器中捕获它。 UIView中列出的UIVonstraintBasedLayoutDebugging类别中的方法也可能有所帮助。
根据StackOverflow上发布的解决方案和上面的输出,由于自动布局掩码,似乎会自动添加其他约束(其中一些与我的4个约束冲突)。
但是,按照建议,我设置了translatesAutoresizingMaskIntoConstraints = false,我仍然收到这些冲突。