UIStackView中的重叠视图

yos*_*ile 17 ios uistackview

我有一个水平堆栈视图,我添加了子视图(7个单元格).堆栈中的每个单元格都具有超出视图边界的圆形徽章(负面约束).运行时,如下所示,每个单元格位于上一个单元格徽章的顶部.我想更改顺序,以便徽章完全可见.

在此输入图像描述

尝试使用Z索引,但它没有帮助,因为您可以在以下视图层次结构中看到图层以某种方式不平坦:

在此输入图像描述

有任何想法或建议如何做到这一点?

谢谢.

yos*_*ile 12

UIStackView类文档告诉我:

子视图数组的顺序定义了子视图的Z顺序.如果视图重叠,则具有较低索引的子视图将显示在具有较高索引的子视图后面.

这正是我在问题中所经历的.为了解决我的具体情况,我做了将视图的语义更改为RTL的技巧,如下所示:

在此输入图像描述

这不是涵盖一般情况,因为设备可能已在其全局设置中设置了RTL语言.对于通用情况,我想我需要检查接口语义并强制与我的堆栈视图相反的方向.

PS这是一种破解,所以任何关于如何以不同的方式重新排序子视图的Z顺序的想法将是最受欢迎的!


fut*_*dam 9

此Swift解决方案使用UIView方法sendSubviewToBack(_:)(此处为docs)反转堆栈视图子视图顺序:

@IBOutlet weak var stackView: UIStackView!

for view in stackView.arrangedSubviews {
    stackView.sendSubviewToBack(view)
}
Run Code Online (Sandbox Code Playgroud)

当我们通过堆栈视图的排列视图(从下到上)前进时,后面的(即更高的)视图被推到底部,从而颠倒顺序:-)


Iva*_*lev 5

从 iOS 9.0 开始,可以独立设置堆栈视图子视图的 z 顺序和排列。使用新arrangedSubviews属性指定沿堆栈视图轴的子视图排列。并使用subviews属性根据子视图在数组中的索引指定子视图的 z 顺序。

堆栈视图确保其arrangedSubviews属性始终是其subviews属性的子集。

排列子视图的文档