我尝试使用嵌套的视图堆栈视图创建堆栈视图以创建网格。网格中的每个单元格都应该有一个标签。我遇到的问题是标签仅在this screenshot中的第一个视图中显示:
我的主堆栈视图的代码很简单:
for _ in 1...5 {
let view = WeekView()
addArrangedSubview(view)
}
这是嵌套堆栈视图的代码。
// Function called in init(frame:)
func configureView() {
spacing = 8
for _ in 1...7 {
let view = UIView()
let label = UILabel()
view.addSubview(label)
addArrangedSubview(view)
label.text = "hi"
label.textAlignment = .center
view.widthAnchor.constraint(equalToConstant: 40).isActive = true
view.translatesAutoresizingMaskIntoConstraints = false
label.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true
label.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
label.translatesAutoresizingMaskIntoConstraints = false
}
}
任何建议都会受到很多关注。
答案 0 :(得分:1)
您没有设置标签的位置。您可以添加水平和垂直约束,但您也可以简单地执行:
label.translatesAutoresizingMaskIntoConstraints = true
label.frame = view.bounds
label.autoresizingMask = [.flexibleWidth, .flexibleHeight]
而不是
label.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true
label.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
label.translatesAutoresizingMaskIntoConstraints = false
答案 1 :(得分:0)
问题可能是您没有设置
label.translatesAutoresizingMaskIntoConstraints = false
请在创建UI元素后尝试直接设置:
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)
...
view.widthAnchor.constraint(equalToConstant: 40).isActive = true
view.heightAnchor.constraint(equalToConstant: 40).isActive = true
然而,在你的情况下,我强烈建议使用UICollectionView
。如果您使用它,您可以免费获得很多东西(包括平滑的水平滚动)。
图像看起来像是在构建某种日历应用程序。如果您使用UICollectionView
,您还可以获得非常灵活的间距和整体布局API。