![](/img/trans.png)
[英]UIStackView programmatically filled with UIViews doesn't scroll inside UIScrollView
[英]Programmatically creating a UIScrollView inside of a UITableViewCell - ScrollView doesn't scroll
我正在尝试在UITableView Cell
创建动态生成的UIScrollView
。 UIScrollView
是使用ScrollViewClass
的build function
的。 该类获取一个视图数组并将它们并排放置,然后返回ScrollView
,然后可以将其添加到cell's subviews
。 ScrollView
已添加并可见,但是, ScrollView
并未按预期水平滚动。 可以在下面找到所有用于此目的的代码。
ScrollViewClass
import Foundation
import UIKit
class ScrollViewClass {
let ArrayOfViews: [UIView]
let scrollView = UIScrollView()
init(ArrayOfViews: [UIView]) {
self.ArrayOfViews = ArrayOfViews
}
func build() -> UIScrollView {
scrollView.isScrollEnabled = true
scrollView.frame.size.width = UIScreen.main.bounds.width
scrollView.frame.size.height = UIScreen.main.bounds.height
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.isPagingEnabled = true
scrollView.contentSize = CGSize(width: 2000, height: 500)
scrollView.showsHorizontalScrollIndicator = true
for (index, views) in ArrayOfViews.enumerated() {
scrollView.addSubview(views)
views.frame.origin.x = CGFloat(index) * UIScreen.main.bounds.width / 2
print(index)
}
return scrollView
}
}
表格检视CellForRowAt
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "CellID")
cell.selectionStyle = UITableViewCellSelectionStyle.none;
let view1 = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 500))
let view2 = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 500))
let view3 = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 500))
view1.backgroundColor = UIColor.blue
view2.backgroundColor = UIColor.green
view3.backgroundColor = UIColor.red
let ArrayOfViews = [view1, view2, view3]
let scrollView = ScrollViewClass(ArrayOfViews: ArrayOfViews)
cell.addSubview(scrollView.build())
return cell
}
您应该将UIStackView与水平轴一起使用,以便scrollview可以正确获取contentSize。
ScrollViewClass
import Foundation
import UIKit
class ScrollViewClass {
let ArrayOfViews: [UIView]
let scrollView = UIScrollView()
init(ArrayOfViews: [UIView]) {
self.ArrayOfViews = ArrayOfViews
}
func build() -> UIScrollView {
scrollView.isScrollEnabled = true
scrollView.frame.size.width = UIScreen.main.bounds.width
scrollView.frame.size.height = UIScreen.main.bounds.height
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.isPagingEnabled = true
scrollView.contentSize = CGSize(width: 2000, height: 500)
scrollView.showsHorizontalScrollIndicator = true
let stackView:UIStackView = UIStackView()
stackView.axis = .horizontal
stackView.distribution = .fillEqually
stackView.alignment = .fill
stackView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
for (index, views) in ArrayOfViews.enumerated() {
stackView.addArrangedSubview(views)
print(index)
}
scrollView.addSubview(stackView)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor, constant: 0).isActive = true
stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor, constant: 0).isActive = true
stackView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 0).isActive = true
stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0).isActive = true
return scrollView
}
}
您还应该在cellForRowAt:
给scrollView
约束cellForRowAt:
let scrollView = ScrollViewClass(ArrayOfViews: ArrayOfViews)
cell.addSubview(scrollView.build())
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.leadingAnchor.constraint(equalTo: cell.leadingAnchor, constant: 0).isActive = true
scrollView.trailingAnchor.constraint(equalTo: cell.trailingAnchor, constant: 0).isActive = true
scrollView.topAnchor.constraint(equalTo: cell.topAnchor, constant: 0).isActive = true
scrollView.bottomAnchor.constraint(equalTo: cell.bottomAnchor, constant: 0).isActive = true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.