居中 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 不居中视图的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 堆栈视图中水平居中视图

如何修复视图居中之谜?

UIImageView 高度与 UILabel 字体高度相同。在 UIStackView 内居中

在 UIStackView 中垂直居中三个 UILabel

Swift:扩展 UIStackView 以创建居中的标签列表

UIStackView 对齐问题