我有一个滚动视图,其中包含登录到应用程序的不同选项。
有两个按钮我想锚定在视图的底部,除非视图变得太小,否则视图应该滚动。
“登录”与"Facebook“之间没有任何约束,会导致臭名昭著的”模糊内容高度“。包含“查看的顶部空间”约束意味着按钮没有锚定在底部。
有没有办法包括这个“灵活的空间”使用自动布局单独?如果不这样做,还能做些什么?
发布于 2015-09-03 12:30:55
看看这个我有一个像你一样的案子。看一看--这肯定会帮助您解决约束冲突。
创建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之后,为滚动视图创建子视图并定义其约束:
这里,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
变量中使用。
https://stackoverflow.com/questions/32374539
复制相似问题