sim*_*yer 12 objective-c uikit ios swift uistackview
我正在使用具有以下配置的UIStackView:
let contentView = UIStackView()
contentView.distribution = .EqualSpacing
contentView.alignment = .Center
contentView.spacing = horizontalSpacing
Run Code Online (Sandbox Code Playgroud)
每个元素都有自己的元素,intrinsicContentSize因此应该可以UIStackView提供自己的元素intrinsicContentSize.文档说明它spacing用作最小间距.
例:
view1: width=10
view2: width=15
spacing = 5
[view1(10)]-5-[view2(15)]
Run Code Online (Sandbox Code Playgroud)
在intrinsicContentSize.width该stackView应该是30.
相反,我得到:
? CGSize
- width : -1.0
- height : -1.0 { ... }
Run Code Online (Sandbox Code Playgroud)
这告诉我 intrinsicContentSize无法提供.
你是否有人知道我是否做错了什么,是否有意或者这是一个错误?
rob*_*off 15
从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)
Run Code Online (Sandbox Code Playgroud)
输出:
true
Run Code Online (Sandbox Code Playgroud)
UIStackView如果你真的需要它,你可以自己创建一个子类并实现它.但是你不应该这样做.如果UIStackView允许(通过约束)选择自己的大小,它会根据其排列的子视图的内在内容大小(或者您根据其排列的子视图的大小设置的其他约束)来实现.
换成这个:
stackView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
Run Code Online (Sandbox Code Playgroud)
如果您希望将其安装在视图中,您可以传递实际视图的框架以及水平和垂直安装所需的优先级。例如,这将保留视图的宽度并调整高度:
stackView.systemLayoutSizeFitting(view.frame.size, withHorizontalFittingPriority: .required, verticalFittingPriority: .defaultLow)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7314 次 |
| 最近记录: |