如何在视图中垂直居中标签

How to center vertically labels in a view

我在一个视图中有 4 个这样的标签:

像这样的视图层次结构:

但是,如果每个标签中的一个文本为空,则所有其他标签都应与图像垂直居中。

例如:albumDataLabel.text为空,则userNameLabelalbumNameLabelalbumLocationLabel应与图片垂直居中。

像这样:

那么如何做到这一点,请指出一些方法。

  • 为每个标签设置高度限制,哪些标签没有文字 在运行时使其高度为零(通过将常量设置为 0 从高度约束的出口开始)。
  • 你的约束应该是线性层次结构,比如第一个标签的顶部应该固定在它的晚餐视图的顶部,最后一个标签的底部应该固定在超级视图的底部,每个标签的底部应该固定在下面标签的顶部。
  • 那么您应该为 view 设置高度约束,其中包含所有具有最小高度常量 (>=) 的标签(您的视图的最小高度)。
  • 并使该视图与您的图像视图垂直居中。

你可以做这样的设置!!

1) 对于您的 userNameLabel:

userNameLabel.leftAnchor.constraintEqualToAnchor(imageView.rightAnchor, constant: 10).active = true
                userNameLabel.topAnchor.constraintEqualToAnchor(self.topAnchor, constant: 50).active = true
                userNameLabel.widthAnchor.constraintEqualToConstant(220).active = true
                userNameLabel.heightAnchor.constraintEqualToConstant(30).active = true

2) 为您的 albumNameLabel:

albumNameLabel.widthAnchor.constraintEqualToConstant(220).active = true
                albumNameLabel.heightAnchor.constraintEqualToConstant(30).active = true
                albumNameLabel.topAnchor.constraintEqualToAnchor(userNameLabel.bottomAnchor, constant: 5).active = true
                albumNameLabel.leftAnchor.constraintEqualToAnchor(imageView.leftAnchor, constant: 10).active = true

3) 记住这一点:

self.addSubview(userNameLabel)
self.addSubview(albumNameLabel)

然后以这种方式继续处理视图中的所有元素。

由于您的 4 个标签已经在一个视图中,您可以设置标签的约束以将第一个标签固定在顶部,最后一个标签固定在底部,并且中间的间距为零

然后 select view(withLabels) 和你的 ImageView 对齐它们的垂直中心

不要为标签和视图设置高度值约束

当您的其中一个标签为空字符串时,高度会自动设置为零,因此 'hidden' 因此视图 (withLabels) 的高度会缩小。一切都可以在界面生成器中完成,无需编码,只需自动布局即可。