[英]Programmatically creating a UIScrollView inside of a UITableViewCell - ScrollView doesn't scroll
I am attempting to create a dynamically generated UIScrollView
within a UITableView Cell
. 我正在尝试在
UITableView Cell
创建动态生成的UIScrollView
。 The UIScrollView
is built using a build function
within the ScrollViewClass
. UIScrollView
是使用ScrollViewClass
的build function
的。 The class takes an array of views and positions them side by side, then returns a ScrollView
which can then be added to the cell's subviews
. 该类获取一个视图数组并将它们并排放置,然后返回
ScrollView
,然后可以将其添加到cell's subviews
。 The ScrollView
is added and visible, however, the ScrollView
does not scroll horizontally as intended. ScrollView
已添加并可见,但是, ScrollView
并未按预期水平滚动。 All of the code for this can be found below. 可以在下面找到所有用于此目的的代码。
ScrollViewClass 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
}
}
TableView CellForRowAt 表格检视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
}
You should use UIStackView with horizontal axis so the scrollview can get the contentSize properly. 您应该将UIStackView与水平轴一起使用,以便scrollview可以正确获取contentSize。
ScrollViewClass 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
}
}
You should also give constraints to the scrollView
in the cellForRowAt:
您还应该在
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.