【问题标题】:Determine UIStackView contentsize确定 UIStackView 内容大小
【发布时间】:2017-08-10 12:26:39
【问题描述】:

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


举个例子:

我以编程方式创建 UIViews 数组...

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

请注意,我故意不定义高度和宽度约束或底部和尾随约束。我不希望根据 stackViews 分布属性调整子视图或间距。

在这个简单的示例中,总内容高度为 40(最高 subView 的高度)。

总宽度 = 所有子视图的宽度 + 所有间距的宽度 = (100 * 5) + (4 * 4) = 516


当我以这种方式初始化subView时,UIStackView的frame和bounds为0,0,0,0。

【问题讨论】:

    标签: ios swift uistackview


    【解决方案1】:

    您的示例在模拟器 iOS 11.3 上运行良好
    添加约束后,使用它来获得所需的宽度

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

    添加subView.backgroundColor = .red 调试您的视图

    【讨论】:

    • 是的,layoutIfNeeded() 是解决许多框架相关问题的“瑞士刀”。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-02-06
    • 2016-08-04
    • 2019-05-09
    • 1970-01-01
    • 2023-03-30
    • 2015-02-15
    • 2016-05-23
    相关资源
    最近更新 更多