我有一个水平堆栈视图,在其中添加了排列的子视图(7个单元格)。堆栈中的每个单元格都有一个圆形标记,该标记超出了视图边界(负约束)。运行时,如下所示,每个单元格都位于前一个单元格的徽章上方。我想更改顺序,以便徽章完全可见。
尝试使用Z索引,但由于在以下视图层次结构中可以看到的层不平坦而没有帮助:
任何想法或建议怎么做?
谢谢。
@IBOutlet weak var stackView: UIStackView!
for view in stackView.arrangedSubviews {
stackView.sendSubviewToBack(view)
}
[当我们浏览堆栈视图的排列视图(从底部到顶部)时,后面的视图(即较高的视图)被推到底部,从而颠倒了顺序:-)
堆栈视图本身设置为白色。
的背景我有一个类似的问题,但是每个子视图都必须具有特定的背景。就我而言,您的黑客技术可能会有所帮助...😉谢谢!extension UIStackView {
func reverseSubviewsZIndex(setNeedsLayout: Bool = true) {
let stackedViews = self.arrangedSubviews
stackedViews.forEach {
self.removeArrangedSubview($0)
$0.removeFromSuperview()
}
stackedViews.reversed().forEach(addSubview(_:))
stackedViews.forEach(addArrangedSubview(_:))
if setNeedsLayout {
stackedViews.forEach { $0.setNeedsLayout() }
}
}
}
stackView.leadingAnchor.constraint(equalTo: stackScrollView.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: stackScrollView.trailingAnchor).isActive = true
stackView.bottomAnchor.constraint(equalTo: stackScrollView.bottomAnchor).isActive = true
stackView.heightAnchor.constraint(equalTo: stackScrollView.heightAnchor).isActive = true
stackView.distribution = .equalSpacing
stackView.spacing = 5
stackView.axis = .horizontal
stackView.alignment = .fill
for i in 0 ..< images.count {
let photoView = UIButton.init(frame: CGRect(x: 0, y: 0, width: 85, height: 85))
// set button image
photoView.translatesAutoresizingMaskIntoConstraints = false
photoView.heightAnchor.constraint(equalToConstant: photoView.frame.height).isActive = true
photoView.widthAnchor.constraint(equalToConstant: photoView.frame.width).isActive = true
stackView.addArrangedSubview(photoView)
}
stackView.setNeedsLayout()