翻转 UIStackView 中项目的位置
Posted
技术标签:
【中文标题】翻转 UIStackView 中项目的位置【英文标题】:Flipping the positions of items in a UIStackView 【发布时间】:2018-01-22 07:26:21 【问题描述】:我有一个UIStackView
,在Interface Builder
中创建,包含两个视图。现在我正在尝试以编程方式更改这些视图的顺序(可以说交换它们的位置)。
不使用 Interface Builder 来完成此操作是否有一个简单的解决方法?
谢谢:)。
【问题讨论】:
如何将语义更改为 .forceRightToLeft。这是一个简单快捷但不是很好的解决方法。 【参考方案1】:在UIStackView
中创建一个带有 2 个UIViews
的布局,如下所示:
为您的UIStackView
创建一个出口到您的UIViewController
。在viewDidLoad
中的UIStackView
上致电addArrangedSubview
以更改订单。请参阅下面的 sn-p。
import UIKit
class ViewController: UIViewController
@IBOutlet weak var stackView: UIStackView!
override func viewDidLoad()
super.viewDidLoad()
// Switches order of the stackView
stackView.addArrangedSubview(self.stackView.subviews[0])
这应该是结果:
addArrangedSubview
获取给定的视图并将其添加到排列的子视图数组的末尾。在我们的例子中,我们在 index[0] 处获取红色视图并将其添加到 UIStackView
的末尾(右侧)。
【讨论】:
如果我在 stackview 中有 4-5 个视图怎么办?【参考方案2】:您可以将 UIStackView 的视图 semantic
从 Unspecified
更改为 Force Right-to-Left
以交换嵌套视图的位置。
【讨论】:
teamOne.semanticContentAttribute = .forceRightToLeft
似乎对我没有任何作用,结果是一样的
hStack.semanticContentAttribute = checkBoxOnRight ? .forceLeftToRight : .forceRightToLeft
曾在 Xcode 12、Swift 5.2 中工作
同意@ilikecode 这对我xCode 13 完全没有任何作用。【参考方案3】:
您可以使用addArragnedSubview
重新排列视图。
只需要 addArragnedSubview,因为在将视图添加到新父级时,它会从旧父级中删除。
if self.viewsSwitched
stackview.addArrangedSubview(self.stackview.subviews[0])
self.viewsSwitched = false
else
stackview.addArrangedSubview(self.stackview.subviews[1])
self.viewsSwitched = true
这段代码通过每次调用交换stackview中的两个视图
【讨论】:
以上是关于翻转 UIStackView 中项目的位置的主要内容,如果未能解决你的问题,请参考以下文章
Xcode IB 警告 UICollectionViewCell 中 UIStackView 的位置不明确,尽管它不应该是