看看这个,我有一个和你一样的案例。看看 - 这肯定会帮助您解决约束冲突。
创建UIScrollView 并使用superview 设置约束
// Create scrollview to display content
self.scrollView = UIScrollView()
self.scrollView.delegate = self
self.scrollView.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(self.scrollView)
scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.Interactive
// Visual formatting constraints of scrollview horizontal-vertical alignment with respect to view
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["scrollView" : scrollView]))
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["scrollView" : scrollView]))
创建scrollView后,为scrollview创建子视图并定义其约束:
[这里VariableView是一个不同的类,它是UIView的子类,它不包含在代码中,仅供参考。将您的视图替换为VariableView]
func createQuestionControls() {
var previousControlView : VariableView! = nil
for variable in self.consultation.variables {
// Create custom view to add controls
var controlView : VariableView! = VariableView()
controlView.customTextDelegate? = self
controlView.setVariableView(variable as! Variable)
controlView.backgroundColor = UIColor.clearColor()
controlView.setTranslatesAutoresizingMaskIntoConstraints(false)
controlView.endEditing(true)
self.scrollView.addSubview(controlView)
// TOP Horizontal constraint
var metrices = ["width" : self.view.bounds.width]
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[controlView(width)]", options: NSLayoutFormatOptions(0), metrics: metrices, views: ["controlView" : controlView]))
if previousControlView == nil {
// Top vertical constraint
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[controlView]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["controlView" : controlView]))
} else {
// Top constraint to previous view
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[previousControlView]-(10)-[controlView]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["controlView" : controlView, "previousControlView" : previousControlView]))
}
previousControlView = controlView
}
// This below constraints will increase UIScrollView content size
var constraint1 = NSLayoutConstraint.constraintsWithVisualFormat("H:[previousControlView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["previousControlView" : previousControlView])
self.scrollView.addConstraints(constraint1)
var constraint2 = NSLayoutConstraint.constraintsWithVisualFormat("V:[previousControlView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["previousControlView" : previousControlView])
self.scrollView.addConstraints(constraint2)
}
这里要注意的一点是,如果UIScrollView中有多个子视图,那么使用底部视图(最后附加在scrollView中的子视图),用于constraint1和constraint2变量。