UILabel并不总是显示在其超级视图
问题描述:
我试图创建一个堆栈视图与视图的嵌套堆栈视图来创建一个网格。网格中的每个单元都应该有一个标签。我的问题是,标签只显示在第一个视图中this screenshot:UILabel并不总是显示在其超级视图
我的主要堆栈视图的代码很简单:
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
}
}
任何建议将大大appriciated。
答
您没有设置标签的位置。您可以添加水平和垂直的限制,但你也可以简单地做:的
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
答
的问题可能是你没有设置
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。
+0
感谢您的建议,我添加了'view.translatesAutoresizingMaskIntoConstraints'。不幸的是它没有帮助。其实我正在寻找'UICollectionView',我想我会重写这个代码,在这之前,虽然我真的想知道为什么这个标签是这样的行为。 – bohdankoshyrets
您没有设置标签的位置,只有它的宽度和高度。 – Sulthan
感谢您的建议,但我认为如果您移动视图,其所有子视图也随之移动,是不是真的?但我试图调用'label.frame.origin = view.frame.origin',但它没有帮助。 – bohdankoshyrets
由于未使用自动识别掩码,因此无法使用“框架”设置位置。您必须为每个标签的X和Y位置添加约束条件。否则,这个位置将是随机的。 – Sulthan