dko*_*och 3 uitableview uikit ios swift uistackview
我希望 UIStackView 调整大小以适合他们的子视图(在这种情况下为 UIImageView 和 UILabel)
let headerView = UIStackView()
headerView.axis = .vertical
headerView.alignment = .center
headerView.distribution = .equalSpacing
headerView.spacing = 10
let headerImage = UIImageView(...)
headerImage.contentMode = .scaleAspectFill
headerImage.clipsToBounds = true
headerImage.frame = CGRect(x: 0, y: 0, width: tableView.frame.width, height: tableView.frame.width / 1.618)
let desciptionView = UILabel()
desciptionView.text = "Some very long text wrapping multiple lines..."
desciptionView.numberOfLines = 0
desciptionView.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.body)
headerView.addArrangedSubview(headerImage)
headerView.addArrangedSubview(desciptionView)
print(headerView.bounds) // always 0,0,0,0
print(headerView.frame) // always 0,0,0,0
tableView.tableHeaderView = headerView
Run Code Online (Sandbox Code Playgroud)
(在此代码中高度和宽度均为 0)
如何实现想要的行为?
我发现这样做的唯一方法是设置子视图的内容拥抱和压缩阻力优先级,如下所示:
let arrangedViews = [filterLabel, image]
.map { (view: UIView) -> UIView in
view.setContentHuggingPriority(.required, for: .horizontal)
view.setContentCompressionResistancePriority(.required, for: .horizontal)
return view }
let stack = UIStackView(arrangedSubviews: arrangedViews)
stack.axis = .horizontal
stack.distribution = .fill
stack.spacing = 8
Run Code Online (Sandbox Code Playgroud)
将这些设置在排列的子视图中,您确实(或至少我做到了)获得了想要的结果。
| 归档时间: |
|
| 查看次数: |
9202 次 |
| 最近记录: |