确定UIStackView的内容大小

10

有没有一种简单的方式来获取UIStackView的总内容大小?


举个例子:

我通过编程的方式创建了一个UIView数组...

var numberOfSubViews = 5

let subViews: [UIView] = {
var array: [UIView] = []

for _ in 0..<numberOfSubViews {
    let height: CGFloat = 40
    let width: CGFloat = 100

    let subView = UIView(frame: CGRect(x: 0, y: 0, width: width, height: height))
    subView.widthAnchor.constraint(equalToConstant: width).isActive = true
    subView.heightAnchor.constraint(equalToConstant: height).isActive = true

    array.append(subView)
}

return array
}()

然后我从那个数组中创建一个简单的UIStackView...

var spacing: CGFloat = 4

let stackView = UIStackView(arrangedSubviews: subViews)
stackView.axis = .horizontal
stackView.spacing = spacing
stackView.translatesAutoresizingMaskIntoConstraints = false;

最后,我将stackView插入到现有的视图中,并将其顶部和前导锚定。

view.addSubview(stackView)
stackView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
注意,我有意不定义高度和宽度约束,也不定义底部和右侧约束。我不希望subViews或间距根据stackView的distribution属性进行调整大小。
在这个简单的例子中,总内容高度为40(最高subView的高度)。
总宽度=所有subview的宽度+所有间距的宽度= (100*5)+(4 * 4)=516
当我以这种方式初始化subView时,UIStackView的frame和bounds都是0,0,0,0。
1个回答

2

您的示例在模拟器iOS 11.3上运行良好。
在添加约束后,使用以下代码获取所需的宽度:

stackView.layoutIfNeeded() print("width: ", stackView.bounds.width)

subView.backgroundColor = .red添加到调试视图。


1
是的,layoutIfNeeded() 是许多与框架相关问题的“瑞士军刀”。 :) - mkll
没错,兄弟,你救了我的一天! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接