首页 > 解决方案 > 如何使用swift以编程方式根据数据设置滚动视图的高度

问题描述

我有一个滚动视图,其中我一个接一个地添加了多个视图,我无法根据数据设置滚动视图的高度。

这是我的屏幕截图

我想滚动我的页面直到保存按钮。

任何帮助将不胜感激。

标签: swiftscrollview

解决方案


我对你的问题有点不清楚,从我目前的理解来看,你可能有几个可能的选择。

  1. 如果您尝试计算传入的数据高度,您将执行类似于下面的行的操作,并将滚动视图高度配置为等于该标签。
label.bounds.size.height
  1. 如果您只想按下滚动视图底部的“保存”按钮,而不管滚动视图的高度如何。将按钮限制在底部可能会更好。
NSLayoutConstraint.activate([
    saveButton.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
    saveButton.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
    saveButton.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
    saveButton.heightAnchor.constraint(equalToConstant: 44)
])
  1. 如果您希望根据每个视图完全控制滚动视图的高度。我创建了一个示例编程约束文件,它手动为每个视图添加高度约束。
import UIKit

class ViewController: UIViewController {

    let scrollView: UIScrollView = {
        let scrollView = UIScrollView()
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        return scrollView
    }()

    let scrollViewContainer: UIStackView = {
        let view = UIStackView()
        view.axis = .vertical
        view.spacing = 10
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()

    let redView: UIView = {
        let view = UIView()
        view.heightAnchor.constraint(equalToConstant: 500).isActive = true
        view.backgroundColor = .red
        return view
    }()

    let blueView: UIView = {
        let view = UIView()
        view.heightAnchor.constraint(equalToConstant: 200).isActive = true
        view.backgroundColor = .blue
        return view
    }()

    let greenView: UIView = {
        let view = UIView()
        view.heightAnchor.constraint(equalToConstant: 1200).isActive = true
        view.backgroundColor = .green
        return view
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        view.addSubview(scrollView)
        scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        
        // ** SWAP VIEWS FOR WHAT YOU NEED HERE **
        scrollView.addSubview(scrollViewContainer)
        scrollViewContainer.addArrangedSubview(redView)
        scrollViewContainer.addArrangedSubview(blueView)
        scrollViewContainer.addArrangedSubview(greenView)

        scrollViewContainer.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
        scrollViewContainer.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
        scrollViewContainer.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
        scrollViewContainer.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
        
        // THIS IS IMPORTANT FOR SCROLLING **LEAVE ALONE**
        scrollViewContainer.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
    }
}

推荐阅读