gpt4 book ai didi

swift - UIScrollView 中的嵌套 UIStackView 子级不会拉伸(stretch)以填充

转载 作者:行者123 更新时间:2023-11-30 10:32:43 28 4
gpt4 key购买 nike

我有一个UIStackView

我添加了一些观点。

最后一个 View 应该位于屏幕底部。为了实现这一目标,我添加了一个充当间隔器的 View ,我在第一个和最后一个 View 上设置了高度,并认为中间 View 会拉伸(stretch)以填充空间。

这有效。

    let topView = UIView(frame: .zero)
topView.withSize(.init(width: 0, height: 100))
topView.backgroundColor = .lightGray

let spacerView = UIView(frame: .zero)
spacerView.backgroundColor = .darkGray

let bottomView = UIView(frame: .zero)
bottomView.withSize(.init(width: 0, height: 200))
bottomView.backgroundColor = .lightGray

let stackView = UIStackView()
stackView.axis = .vertical
stackView.alignment = .fill
stackView.spacing = 0
stackView.distribution = .fill

addSubview(stackView)

stackView.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([
stackView.leadingAnchor.constraint(equalTo: leadingAnchor),
stackView.trailingAnchor.constraint(equalTo: trailingAnchor),
stackView.topAnchor.constraint(equalTo: topAnchor),
stackView.bottomAnchor.constraint(equalTo: bottomAnchor),
])

[topView, spacerView, bottomView].forEach { stackView.addArrangedSubview($0) }

enter image description here

我有一个场景,但是屏幕尺寸可能小于 View 的尺寸。

我正在尝试将我的 UIStackView 嵌入到 UIScrollView 中,但是当我这样做时,间隔 View 不再自行拉伸(stretch)。就好像高度现在为零一样。 (我添加了间距以显示顶部和底部 View )


let topView = UIView(frame: .zero)
topView.withSize(.init(width: 0, height: 100))
topView.backgroundColor = .lightGray

let spacerView = UIView(frame: .zero)
spacerView.backgroundColor = .darkGray

let bottomView = UIView(frame: .zero)
bottomView.withSize(.init(width: 0, height: 200))
bottomView.backgroundColor = .lightGray


let scrollView = UIScrollView(frame: .zero)
addSubviews(scrollView)

NSLayoutConstraint.activate([
scrollView.leadingAnchor.constraint(equalTo: leadingAnchor),
scrollView.trailingAnchor.constraint(equalTo: trailingAnchor),
scrollView.topAnchor.constraint(equalTo: topAnchor),
scrollView.bottomAnchor.constraint(equalTo: bottomAnchor)
])

let stackView = UIStackView()
stackView.axis = .vertical
stackView.alignment = .fill
stackView.spacing = 8
stackView.distribution = .fill
scrollView.addSubview(stackView)

stackView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
// Attaching the content's edges to the scroll view's edges
stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
stackView.topAnchor.constraint(equalTo: scrollView.topAnchor),
stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),

// Satisfying size constraints
stackView.widthAnchor.constraint(equalTo: scrollView.widthAnchor)
])

[topView, spacerView, bottomView].forEach { stackView.addArrangedSubview($0) }

enter image description here

在这种情况下,我希望我的 UIStackView 仍然填充 View ,并且只有在 subview 导致其高度增长超出 View 的可见边界时才可滚动。

最佳答案

使用带有 UICollectionView 的 UITableView 作为页脚。

您可以在这里找到教程: https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell-in-swift/

这是为了将 collectionView 添加为页眉,但对于页脚的作用相同。

private let tableView: UITableView = {
let view = UITableView(frame: .zero, style: .plain)
view.translatesAutoresizingMaskIntoConstraints = false
view.estimatedRowHeight = 44
view.rowHeight = UITableView.automaticDimension
view.keyboardDismissMode = .interactive
view.tableFooterView = //Your Custom View with CollectionView here
return view
}()

关于swift - UIScrollView 中的嵌套 UIStackView 子级不会拉伸(stretch)以填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58790539/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com