我正在使用具有以下配置的UIStackView:

let contentView = UIStackView()
contentView.distribution = .EqualSpacing
contentView.alignment = .Center
contentView.spacing = horizontalSpacing

每个元素都有自己的intrinsicContentSize,因此UIStackView应该有可能提供自己的intrinsicContentSize。该文档指出spacing被用作最小间距。

例子:
view1: width=10
view2: width=15
spacing = 5
[view1(10)]-5-[view2(15)]

stackView的intrinsicContentSize.width应该是30

相反,我得到:
▿ CGSize
 - width : -1.0
 - height : -1.0 { ... }

告诉我无法提供intrinsicContentSize

你们中有人知道我是否做错了什么,是否有此行为或这是一个错误吗?

最佳答案

从iOS 9.1开始,UIStackView不实现intrinsicContentSize:

import UIKit
import ObjectiveC

let stackViewMethod = class_getInstanceMethod(UIStackView.self, "intrinsicContentSize")
let viewMethod = class_getInstanceMethod(UIView.self, "intrinsicContentSize")
print(stackViewMethod == viewMethod)

输出:
true

您可以创建UIStackView的子类,并在需要时自行实现。不过,您不需要。如果允许UIStackView(受其约束)选择自己的大小,则会根据其已安排的 subview 的固有内容大小(或受您已为其安排的 subview 的大小设置的其他约束)进行选择。

关于ios - UIStackView自己的internalContentSize,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33348755/

10-12 06:15