【问题标题】:Flipping the positions of items in a UIStackView翻转 UIStackView 中项目的位置
【发布时间】:2018-01-22 07:26:21
【问题描述】:

我有一个UIStackView,在Interface Builder 中创建,包含两个视图。现在我正在尝试以编程方式更改这些视图的顺序(可以说交换它们的位置)。

使用 Interface Builder 来完成此操作是否有一个简单的解决方法?

谢谢:)。

【问题讨论】:

  • 如何将语义更改为 .forceRightToLeft。这是一个简单快捷但不是很好的解决方法。

标签: swift uistackview


【解决方案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 的视图 semanticUnspecified 更改为 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中的两个视图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    相关资源
    最近更新 更多