如何在视图中垂直居中标签
How to center vertically labels in a view
我在一个视图中有 4 个这样的标签:
像这样的视图层次结构:
但是,如果每个标签中的一个文本为空,则所有其他标签都应与图像垂直居中。
例如:albumDataLabel.text
为空,则userNameLabel
、albumNameLabel
、albumLocationLabel
应与图片垂直居中。
像这样:
那么如何做到这一点,请指出一些方法。
- 为每个标签设置高度限制,哪些标签没有文字
在运行时使其高度为零(通过将常量设置为 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) 的高度会缩小。一切都可以在界面生成器中完成,无需编码,只需自动布局即可。
我在一个视图中有 4 个这样的标签:
像这样的视图层次结构:
但是,如果每个标签中的一个文本为空,则所有其他标签都应与图像垂直居中。
例如:albumDataLabel.text
为空,则userNameLabel
、albumNameLabel
、albumLocationLabel
应与图片垂直居中。
像这样:
那么如何做到这一点,请指出一些方法。
- 为每个标签设置高度限制,哪些标签没有文字 在运行时使其高度为零(通过将常量设置为 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) 的高度会缩小。一切都可以在界面生成器中完成,无需编码,只需自动布局即可。