ScrollView在swift 3中添加SubView

时间:2016-12-20 06:55:38

标签: ios swift3 uiscrollview scrollview

我想尝试在滚动视图上添加一个视图表单但是视图没有完全添加到滚动视图的框架上,我的代码是:

import UIKit

class AddIncomeVC: UIViewController {
    @IBOutlet var scrollView: UIScrollView!
    @IBOutlet var views: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        scrollView.contentSize = views.frame.size
        scrollView.addSubview(views)

    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        views.frame = CGRect(x: 0, y: 0, width: scrollView.frame.size.width, height: scrollView.frame.size.height)
    }

}

enter image description here

谢谢,

3 个答案:

答案 0 :(得分:3)

修改专栏

views.frame = CGRect(x: 0, y: 0, width: scrollView.frame.size.width, height: scrollView.frame.size.height)

views.frame = CGRect(x: 0, y: 0, width: scrollView.contentSize.width, height: scrollView.contentSize.height)

答案 1 :(得分:1)

我用这段代码解决了我的问题:

import UIKit

class AddIncomeVC: UIViewController {
    @IBOutlet var scrollView: UIScrollView!
    @IBOutlet var views: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        scrollView.contentSize = views.frame.size
        scrollView.addSubview(views)


    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        views.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height)

    }

}

感谢所有人为我的问题提供宝贵的时间。 enter image description here

答案 2 :(得分:1)

问题是:在视图加载时,您的约束不会更新为新的显示大小。 我相信你的问题就出现了,因为你正在使用一个与你的故事板不同大小的模拟器来运行应用程序......一个更大的尺寸(故事板使用iPhone SE并在iphone 6模拟器上运行,例如)。

在View did Load中,您的视图已经存在,它是真的......但它的约束仍然具有iphone SE大小。

因此,在视图加载时,您设置的内容大小(您希望使用iphone6屏幕大小)等于故事板视图大小(仍然是iphone SE屏幕大小)。

您的解决方案效果很好。在iOS布局所有子视图之后,约束将更新为新的屏幕大小,并保持其比例。 在viewDidLayoutSubviews中,“视图”已经具有正确的约束值...因此,视图具有iphone6屏幕尺寸,您可以使用正确的框架设置