UILabel并不总是显示在其超级视图

问题描述:

我试图创建一个堆栈视图与视图的嵌套堆栈视图来创建一个网格。网格中的每个单元都应该有一个标签。我的问题是,标签只显示在第一个视图中this screenshotUILabel并不总是显示在其超级视图

我的主要堆栈视图的代码很简单:

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。

+0

您没有设置标签的位置,只有它的宽度和高度。 – Sulthan

+0

感谢您的建议,但我认为如果您移动视图,其所有子视图也随之移动,是不是真的?但我试图调用'label.frame.origin = view.frame.origin',但它没有帮助。 – bohdankoshyrets

+0

由于未使用自动识别掩码,因此无法使用“框架”设置位置。您必须为每个标签的X和Y位置添加约束条件。否则,这个位置将是随机的。 – Sulthan

您没有设置标签的位置。您可以添加水平和垂直的限制,但你也可以简单地做:的

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