我已经弄乱这段代码有一段时间了。我的 UIViews 循环后没有显示。我已经在没有限制的情况下尝试过这个,结果是每个 UIView 都被渲染在彼此之上。我更喜欢使用约束,就像我设置的那样。
你能看一下这段代码并解释为什么我的 UIView 没有渲染以及为什么我的 UIScrollView 没有滚动吗?
import UIKit
class EventsListViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let scrollView = UIScrollView()
let scrollViewConstraints: [NSLayoutConstraint] = [
scrollView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),
scrollView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor),
scrollView.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor),
scrollView.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor)
]
self.view.addSubview(scrollView)
scrollView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate(scrollViewConstraints)
scrollView.backgroundColor = .gray
let stackView = UIStackView(frame: scrollView.frame)
let stackViewConstraints: [NSLayoutConstraint] = [
stackView.topAnchor.constraint(equalTo: scrollView.topAnchor),
stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor)
]
scrollView.addSubview(stackView)
stackView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate(stackViewConstraints)
stackView.axis = .vertical
stackView.distribution = .fill
stackView.alignment = .fill
stackView.contentMode = .top
stackView.spacing = 5
for event in location.myEvents! {
let listItem = UIView()
listItem.layer.name = event.eventID
listItem.backgroundColor = .blue
stackView.addArrangedSubview(listItem)
let listItemConstraints: [NSLayoutConstraint] = [
listItem.heightAnchor.constraint(equalToConstant: 35),
listItem.widthAnchor.constraint(equalToConstant: stackView.frame.width)
]
listItem.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate(listItemConstraints)
}
// scrollView.contentSize = CGSize(width: Int(view.frame.width), height: (height + spacing * count))
}
}
我尝试过以下方法:
使用 ScrollView 进行自动布局有点棘手。正如我所见,您缺少 stackView 的 widthAnchor,请添加此行:
...
stackView.widthAnchor.constraint(equalTo: self.view.widthAnchor)