UIScrollView 内的水平 UIStackView 不滚动
Posted
技术标签:
【中文标题】UIScrollView 内的水平 UIStackView 不滚动【英文标题】:Horizontal UIStackView inside UIScrollView not scrolling 【发布时间】:2017-10-10 14:33:51 【问题描述】:我在 UIScrollView 中有一个带有 3 个按钮的水平 UIStackView。当用户更改字体大小(通过辅助功能)时,我希望堆栈水平滚动。
现在,当用户增加字体大小时,其中一个按钮会被压扁。
这是我的限制:
【问题讨论】:
【参考方案1】:滚动视图和右侧按钮之间的大于或等于约束似乎是问题所在。我将其更改为 Equal 并且有效。
【讨论】:
很高兴听到这个消息!干杯【参考方案2】:确保 UIScrollView 的内容大小设置正确。以下是一些有用的参数。
scrollVIew.contentInset
scrollVIew.scrollIndicatorInsets
scrollView.contentSize
当内容视图高于滚动视图时,滚动视图启用垂直滚动。当内容视图比滚动视图宽时,滚动视图启用水平滚动。否则,默认情况下禁用滚动。您必须动态设置内容视图大小,以便当他们更改字体时,内容视图会比滚动视图宽度更宽。您可以将堆栈视图包装在另一个 UIViewController 中并将其视为内容视图。
【讨论】:
抱歉含糊不清。当内容视图高于滚动视图时,滚动视图启用垂直滚动。当内容视图比滚动视图宽时,滚动视图启用水平滚动。否则,默认情况下禁用滚动。您必须动态设置内容视图大小,以便当他们更改字体时,内容视图会比滚动视图宽度更宽。您可以将堆栈视图包装在另一个 UIViewController 中并将其视为内容视图。【参考方案3】:试试这个在我这边工作得很好并且滚动得很好。
func createHorizontalStackViewWithScroll()
self.view.addSubview(stackScrollView)
stackScrollView.translatesAutoresizingMaskIntoConstraints = false
stackScrollView.heightAnchor.constraint(equalToConstant: 85).isActive = true
stackScrollView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
stackScrollView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
stackScrollView.bottomAnchor.constraint(equalTo: visualEffectViews.topAnchor).isActive = true
stackScrollView.addSubview(stackView)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.topAnchor.constraint(equalTo: stackScrollView.topAnchor).isActive = true
stackView.leadingAnchor.constraint(equalTo: stackScrollView.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: stackScrollView.trailingAnchor).isActive = true
stackView.bottomAnchor.constraint(equalTo: stackScrollView.bottomAnchor).isActive = true
stackView.heightAnchor.constraint(equalTo: stackScrollView.heightAnchor).isActive = true
stackView.distribution = .equalSpacing
stackView.spacing = 5
stackView.axis = .horizontal
stackView.alignment = .fill
for i in 0 ..< images.count
let photoView = UIButton.init(frame: CGRect(x: 0, y: 0, width: 85, height: 85))
// set button image
photoView.translatesAutoresizingMaskIntoConstraints = false
photoView.heightAnchor.constraint(equalToConstant: photoView.frame.height).isActive = true
photoView.widthAnchor.constraint(equalToConstant: photoView.frame.width).isActive = true
stackView.addArrangedSubview(photoView)
stackView.setNeedsLayout()
【讨论】:
以上是关于UIScrollView 内的水平 UIStackView 不滚动的主要内容,如果未能解决你的问题,请参考以下文章
用于水平滚动的 UIScrollView 内的 UITableView 无法按预期工作
UIScrollView 内的 UITableViewController 与水平分页
分页 UIScrollView 内的 UIScrollView