UIKit中UIStackView图层属性有什么用

问题描述 投票:0回答:2

每个视图都有一个进行渲染的层。让我困惑的是,您无法为堆栈视图设置圆角半径或边框,但是当您隐藏其中一个排列的子视图时,其余的子视图会填充堆栈视图。

此外,Apple 文档说堆栈视图仅管理其排列的子视图。

但是,堆栈视图如何调整其子视图的大小?当隐藏排列的子视图时,堆栈视图的图层是否会调整大小?如果不是,那么 stack 视图中的 Layer 属性有什么用?


请注意,截至 2024 年,这不再是事实。现在已经是正常视图了。

ios uikit calayer uistackview
2个回答
2
投票

UIStackView 是 UIView 的 nonrendering 子类;也就是说,它不提供任何自己的用户界面。相反,它只是管理其排列视图的位置和大小。因此,某些属性(如backgroundColor)对堆栈视图没有影响。同样,您不能覆盖layerClass、draw(:)或draw(:in:)。

考虑将堆栈视图放置在另一个 UIView 内,并为该视图提供角半径或边框。
苹果文档


0
投票

请注意,截至 2024 年,堆栈视图现在完全“正常”工作,就像 iOS 的其他部分一样:

    backgroundColor = .ExtremelyPaleGrayBackground
    layer.borderColor = UIColor.label.cgColor
    layer.borderWidth = 1
    layer.cornerCurve = .circular
    layer.cornerRadius = 4

等等

还值得注意的是,您可以轻松添加视图 - 而不是排列的子视图 - 它将完美地用作堆栈视图的背景,包括修剪边缘等。

例如,类似

//a NORMAL view that will be a permanent bg of the stackview
private lazy var bgView: UIView = {
    let v = UIView.Typical
    v.backgroundColor = .brown
    addSubview(v)
    return v
}()

private lazy var setup: () = {
    addSubview(bgView) // be sure to add first
    // now add your various "stack views" in the usual way
    addArrangedSubview(switchOnLeft)
    addArrangedSubview(textOnRight)
    .. etc
    setNeedsLayout()
    return ()
}()
© www.soinside.com 2019 - 2024. All rights reserved.