Swift - UIScrollView的约束问题(以编程方式)

时间:2015-03-17 09:45:54

标签: ios swift uiscrollview autolayout constraints

我最近在我的viewcontroller中添加了一个scrollview。然而,这导致我的布局完全陷入困境。

下面是一张图片。

screenshot

(我给UIScrollView一个临时的红色背景,显示它显然是全屏幕)

现在。在这个视图中我有很多东西。但为了保持简单,我将专注于顶部的蓝色条,在我的应用程序中称为“topBar”

首先,我在班上定义它。

var topBar = UIView()

我删除自动调整大小,给它一个颜色并将其添加到我的滚动视图。

//----------------- topBar ---------------//

    topBar.setTranslatesAutoresizingMaskIntoConstraints(false)
    topBar.backgroundColor = UIColor.formulaBlueColor()
    self.scrollView.addSubview(topBar)

将其添加到我的viewsDictionary:

var viewsDictionary = [ "topBar":topBar]

将高度添加到我的metricsDictionary:

let metricsDictionary = ["topBarHeight":6]

在尺寸约束中设置高度。

//sizing constraints
    self.scrollView.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "V:[topBar(topBarHeight)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary))

最后这部分不起作用。我/尝试/使其成为“scrollView”的全宽

// Horizontal Constraints
    self.scrollView.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "H:|[topBar]|", options: nil, metrics: nil, views: viewsDictionary))

和我的垂直约束把它放在最上面。

// Vertical Constraints
    self.scrollView.addConstraints(
        NSLayoutConstraint.constraintsWithVisualFormat(
            "V:|[topBar]", options: nil, metrics: nil, views: viewsDictionary))

现在我的scrollview(可能导致我的布局难题的那个)

它的设置如下:

是班上第一件事:

    let scrollView = UIScrollView(frame: UIScreen.mainScreen().bounds)

我的viewDidLoad()

中的第一件事
self.view.addSubview(scrollView)
    scrollView.setTranslatesAutoresizingMaskIntoConstraints(false)
    scrollView.scrollEnabled = true

最后我的viewDidLayoutSubviews。

    override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    scrollView.frame = view.bounds
    scrollView.contentSize = CGSize(width:2000, height: 5678)
}

^ contentSize的宽度将更改为屏幕的宽度(我只想垂直滚动)。但是现在,与我所拥有的布局问题相比,这是一个小问题

任何关于为什么一切都被挤在一起的帮助将非常感激!

1 个答案:

答案 0 :(得分:1)

我设法解决了以下问题。

viewDidLayoutSubviews

中定义我的内容
    override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    scrollView.frame = view.bounds
    scrollView.contentSize = CGSize(width:self.view.bounds.width, height: 5678)
}

而不是让视图等于滚动视图,我不得不把它作为它的子视图。

我还必须制作滚动视图的子视图,以便我的所有内容都能正确使用约束。

    self.view.addSubview(scrollView)
    scrollView.translatesAutoresizingMaskIntoConstraints = false

    contentView.translatesAutoresizingMaskIntoConstraints = false
    scrollView.addSubview(contentView)

我的所有其他对象都是" contentView"的子视图。而不是滚动视图。