居中 UIStackView 不居中视图
Posted
技术标签:
【中文标题】居中 UIStackView 不居中视图【英文标题】:Center UIStackView not centering view 【发布时间】:2020-02-27 23:10:34 【问题描述】:我有这个
view.addSubview(myName)
myName.topAnchor.constraint(equalTo: myImage.bottomAnchor).isActive = true
myName.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
myName.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
let stackView = UIStackView(arrangedSubviews: [myValue1,myValue2])
view.addSubview(stackView)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.alignment = .center
stackView.topAnchor.constraint(equalTo: myName.bottomAnchor).isActive = true
知道为什么会这样吗?我希望它像示例文本一样垂直居中,我尝试添加
stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
但是看起来像这样
知道我错过了什么吗?
【问题讨论】:
【参考方案1】:试试
stackView.centerXAnchor.constraint(equalTo: myName.centerXAnchor).isActive = true
这应该使堆栈视图本身以myName
标签为中心
请注意,如果您希望堆栈视图中的内容能够很好地对齐,您必须给它一些成比例或固定的宽度,并给您的堆栈视图一个宽度。
更新
如果你想要标签之间的空间,在它们之间添加一个额外的UIView()
到堆栈中:
let spacer = UIView()
spacer.widthAnchor.constraint(equalToConstant: 40.0).isActive = true
let stackView = UIStackView(arrangedSubviews: [myValue1,spacer, myValue2])
【讨论】:
如何在 UiLabels 之间添加空格?现在他们在一起了 也许我做错了,我正在创建这个懒惰的 var spaceBetween : UIView = let space = UIView() space.widthAnchor.constraint(equalToConstant: 40.0).isActive = true return space () 但它说源文件中的字符无效it says invalid character in source file
a) 在哪一行 b) 你为什么要偷懒?
因为我有这样的视图,创建为惰性然后在其他文件上使用
@StuartDTO 创建视图为lazy
是一个疯狂的想法。 Lazy 将在首次访问时初始化并设置值,然后存储它们。如果将它们添加到两个不同的视图层次结构,视图的完全相同的实例将分配给两者。如果您希望工厂生成many of the same looking
视图,只需将其转换为func
。如果您需要动态添加和隐藏部分 UI,并且不想提前构建层次结构,只需添加一个 func 来构建这些部分。以上是关于居中 UIStackView 不居中视图的主要内容,如果未能解决你的问题,请参考以下文章
UIImageView 高度与 UILabel 字体高度相同。在 UIStackView 内居中