Swift - 使用UIScrollView(以编程方式)出现约束问题

3

我最近在我的视图控制器中添加了一个滚动视图。然而,这导致我的布局完全混乱。

下面是一张图片。

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

现在关于我的滚动视图(可能导致布局问题的那个),它的设置如下:
作为类中的第一个元素:
    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)
}

^ 内容大小的宽度将被更改为屏幕的宽度(我只想要垂直滚动)。但现在与我遇到的布局问题相比,这只是一个小问题。

如何解决所有东西挤在一起的问题,任何帮助都将不胜感激!

1个回答

1

我通过以下步骤成功解决了问题。

viewDidLayoutSubviews中定义我的内容大小。

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

而不是将视图设置为scrollview,我需要将其作为scrollview的子视图。
我还需要将scrollview的一个子视图,以便我的所有内容可以正确地使用约束。
    self.view.addSubview(scrollView)
    scrollView.translatesAutoresizingMaskIntoConstraints = false

    contentView.translatesAutoresizingMaskIntoConstraints = false
    scrollView.addSubview(contentView)

而我所有的其他对象都是作为“contentView”的子视图,而不是滚动视图的子视图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接