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

Swift - constraint issues with UIScrollView (programmatically)

我最近在 viewcontroller 中添加了一个滚动视图。但是,这导致我的布局完全混乱。

下面是一张图片。

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

现在。在这个视图中我有很多东西。但为简单起见,我将重点关注顶部的蓝色条,在我的应用程序中称为 "topBar"

首先,我在 class 中定义了它。

var topBar = UIView()

我删除了自动调整大小,为其添加颜色并将其添加到我的滚动视图中。

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

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

将其添加到我的视图词典中:

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))

最后是不起作用的部分。我 /attempt/ 使其成为 "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))

现在关于我的滚动视图,(可能让我头疼的布局)

设置如下:

作为 class 中的第一件事:

    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 的宽度将更改为屏幕的宽度(我只想垂直滚动)。但现在与我遇到的布局问题相比,这是一个小问题

任何关于为什么所有东西都挤在一起的帮助将不胜感激!

我通过以下操作成功修复了它。

正在 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" 的子视图,而不是滚动视图。