我正在使用具有以下配置的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/