【问题标题】:Swift - constraint issues with UIScrollView (programmatically)Swift - UIScrollView 的约束问题(以编程方式)
【发布时间】:2015-05-19 16:33:22
【问题描述】:

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

下面是一张图片。

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

现在。我在这个视图中有很多东西。但为了简单起见,我将重点放在顶部的蓝色条上,在我的应用中称为“topBar”

首先,我在我的类中定义它。

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

现在至于我的滚动视图,(可能导致我的布局头痛的那个)

设置如下:

作为课堂上的第一件事:

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

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

【问题讨论】:

    标签: ios swift uiscrollview autolayout constraints


    【解决方案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”的子视图,而不是滚动视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多