使用 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()'。
我正在使用 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()'。