首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以使用Autolayout在UIScrollView中包含灵活的空间吗?

我可以使用Autolayout在UIScrollView中包含灵活的空间吗?
EN

Stack Overflow用户
提问于 2015-09-03 11:36:28
回答 1查看 620关注 0票数 3

我有一个滚动视图,其中包含登录到应用程序的不同选项。

有两个按钮我想锚定在视图的底部,除非视图变得太小,否则视图应该滚动。

“登录”与"Facebook“之间没有任何约束,会导致臭名昭著的”模糊内容高度“。包含“查看的顶部空间”约束意味着按钮没有锚定在底部。

有没有办法包括这个“灵活的空间”使用自动布局单独?如果不这样做,还能做些什么?

EN

回答 1

Stack Overflow用户

发布于 2015-09-03 12:30:55

看看这个我有一个像你一样的案子。看一看--这肯定会帮助您解决约束冲突。

创建UIScrollView和使用superview设置约束

代码语言:javascript
运行
复制
// 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替换您的视图

代码语言:javascript
运行
复制
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中的子视图),在constraint1constraint2变量中使用。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32374539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档