以编程方式重新排序子视图在 tableViewCell 中不起作用

Reordering subviews programatically won't work in a tableViewCell

我正在尝试重新排序图像和堆栈视图(此处称为 labelsStack),它们都包含在另一个堆栈视图(此处称为堆栈)中。我的目标是以编程方式反转两个子视图的索引顺序,以便在运行时更改它们的位置(它们是水平分布的,所以理论上,如果我重新排序它们的索引,它应该在自动布局中重新排序它们)

我尝试从 Apple 文档更新索引、交换子视图、sendViewForward 等,但它不起作用,这是我的 tableViewCell 的代码:

     override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code


           }

    override func layoutSubviews() {
        cellImage.layer.cornerRadius = cellImage.bounds.height / 3
        cellImage.clipsToBounds = true

        if incoming {
        } else {
// as one of the many methods that didn't work
            self.stack.insertSubview(cellImage, belowSubview: labelsStack)
        }


    }

您可以创建两组替代约束,一组用于默认顺序,另一组用于相反顺序。默认约束是以 1

结尾的约束

要最初停用替代设置,您可以使用检查器并更改 已安装 复选框

您的视图控制器现在应该有 6 个出口:

@IBOutlet weak var topViewTopConstraint1: NSLayoutConstraint!
@IBOutlet weak var bottomViewTopConstraint1: NSLayoutConstraint!
@IBOutlet weak var bottomViewBottomConstraint1: NSLayoutConstraint!

@IBOutlet weak var topViewTopConstraint2: NSLayoutConstraint!
@IBOutlet weak var bottomViewTopConstraint2: NSLayoutConstraint!
@IBOutlet weak var topViewBottomConstraint2: NSLayoutConstraint!

现在要激活您可以使用的另一组约束:

    self.topViewBottomConstraint2.active = true
    self.topViewTopConstraint2.active = true
    self.bottomViewTopConstraint2.active = true
    self.topViewTopConstraint1.active = false
    self.bottomViewBottomConstraint1.active = false
    self.bottomViewTopConstraint1.active = false

反之亦然