swift - 如何使用swift以编程方式根据数据设置滚动视图的高度
问题描述
我有一个滚动视图,其中我一个接一个地添加了多个视图,我无法根据数据设置滚动视图的高度。
我想滚动我的页面直到保存按钮。
任何帮助将不胜感激。
解决方案
我对你的问题有点不清楚,从我目前的理解来看,你可能有几个可能的选择。
- 如果您尝试计算传入的数据高度,您将执行类似于下面的行的操作,并将滚动视图高度配置为等于该标签。
label.bounds.size.height
- 如果您只想按下滚动视图底部的“保存”按钮,而不管滚动视图的高度如何。将按钮限制在底部可能会更好。
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)
])
- 如果您希望根据每个视图完全控制滚动视图的高度。我创建了一个示例编程约束文件,它手动为每个视图添加高度约束。
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
}
}
推荐阅读
- django - Django Logging Root Logger 没有从我的项目的一部分中获取日志消息
- python - 循环遍历层后附加熊猫数据帧
- haskell - Haskell 列表理解类型错误:无法将预期类型“Float”与实际类型“Int”匹配
- android - 我可以使用所有 AVD 模拟器导入/导出项目吗?
- ios - 获取断言时出错,那是什么?
- javascript - 多个 A 帧视频仅在移动设备上显示为黑屏
- flutter - 网格视图图像视图差异 Flutter 中的问题?
- html - 无法移动 div
- python - 在上下限不均匀的点周围绘制误差线
- c# - 从服务器刷新数据后,Blazor WASM 不更新 UI