使用 Snapkit 以编程方式创建 ScrollView

Create ScrollView programmatically using Snapkit

我正在使用 snapkit 以编程方式制作滚动视图,它可以滚动,但问题是最后一个元素(systemTeal color tempView)无法完全看到。

我在 Scrollview 中创建了 contentView,它包含了所有元素。

class ScrollViewController: UIViewController {

    let scrollView = UIScrollView()
    let contentView = UIView()

    private var datePickerView = UIView().then {
        [=10=].backgroundColor = .pastelGreen
        [=10=].layer.cornerRadius = 8
    }    
   
    var colorGraphView = UIView().then {
        [=10=].backgroundColor = .clear
    }
    
    var tableView = UITableView().then {
        [=10=].backgroundColor = .shadowColor
    }

    var tempView = UIView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        commonInit()
        scrollView.delegate = self
    }
    
    func commonInit() {
        self.view.addSubview(scrollView)
        scrollView.snp.makeConstraints { make in
            make.edges.equalTo(self.view.safeAreaLayoutGuide)
        }
        
        scrollView.addSubview(contentView)
        contentView.snp.makeConstraints { make in
            make.edges.equalTo(self.scrollView)
            make.width.equalTo(self.scrollView)
        }

        contentView.addSubview(datePickerView)
        contentView.addSubview(colorGraphView)
        contentView.addSubview(tableView)
        contentView.addSubview(tempView)
        
        datePickerView.snp.makeConstraints { make in
            make.leading.equalTo(contentView.snp.leading).offset(16)
            make.trailing.equalTo(contentView.snp.trailing).offset(-16)
            make.top.equalTo(contentView).offset(26)
            make.height.equalTo(42)
        }

        colorGraphView.snp.makeConstraints { make in
            make.leading.equalTo(contentView).offset(16)
            make.trailing.equalTo(contentView).offset(-16)
            make.top.equalTo(datePickerView.snp.bottom).offset(19)
            make.height.equalTo(390)
        }
        tableView.snp.makeConstraints { make in
            make.leading.equalTo(contentView).offset(16)
            make.trailing.equalTo(contentView).offset(-16)
            make.top.equalTo(colorGraphView.snp.bottom).offset(10)
            make.height.equalTo(150)
        }
        tempView.snp.makeConstraints { make in
            make.top.equalTo(tableView.snp.bottom).offset(10)
            make.leading.equalTo(contentView.snp.leading).offset(16)
            make.trailing.equalTo(contentView.snp.trailing).offset(-16)
            make.height.equalTo(100)
            make.bottom.equalTo(contentView.snp.bottom).offset(-20)
        }

        scrollView.backgroundColor = .brown
        contentView.backgroundColor = .blue
        colorGraphView.backgroundColor = .yellow
        tableView.backgroundColor = .gray
        tempView.backgroundColor = .systemTeal    
}

如何在不设置 contentSize 的情况下创建自动布局滚动视图?

Srcollview 现在看起来像这样

我认为问题可能出在 make.edges.equalTo 的使用上。它会将超级视图的边缘静态设置为您的滚动视图和内容视图,而不是将顶部、前导、尾随、底部锚点限制到超级视图。我建议您尝试使用 'make.top.leading.trailing.bottom.equalToSuperview()'。