UILabel并不总是出现在其超级视图中

时间:2017-05-28 17:48:53

标签: ios swift uiview uikit uilabel

我尝试使用嵌套的视图堆栈视图创建堆栈视图以创建网格。网格中的每个单元格都应该有一个标签。我遇到的问题是标签仅在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
    }
}

任何建议都会受到很多关注。

2 个答案:

答案 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。