在启用分页的情况下将表格视图添加到滚动视图。
Posted
技术标签:
【中文标题】在启用分页的情况下将表格视图添加到滚动视图。【英文标题】:Adding tableview to scrollview with paging enabled. 【发布时间】:2018-01-29 09:37:12 【问题描述】:我正在创建一个应用程序,它的一个屏幕需要有一个带有分页的 UIScrollView。在滚动视图的每个页面中,它需要有一个 UITableView,如下所示:
我已经完成创建一个启用分页的滚动视图(以编程方式),但我面临的问题是: 如果我创建一个简单的 UILabel 并将其添加到页面中,它就可以正常工作。但是,如果我创建一个 tableview 并将其添加到页面中(如果这个术语有意义的话),屏幕上不会显示任何内容。这是我在相关地方的 cmets 代码,以便更好地理解:
class SampleViewController: UIViewController, UIScrollViewDelegate, UITableViewDelegate, UITableViewDataSource
let screenHeight = UIScreen.main.bounds.height
let screenWidth = UIScreen.main.bounds.width
let scrollView = UIScrollView()
let tableView = UITableView()
var colors:[UIColor] = [UIColor.red, UIColor.blue, UIColor.green, UIColor.yellow]
let animals: [String] = ["Horse", "Cow", "Camel", "Sheep", "Goat", "Dog", "Cat", "Kitten", "Lion", "Tiger", "Owl", "Skylark", "Snail", "Cub", "Zebra"]
var frame: CGRect = CGRect(x:0, y:0, width:0, height:0)
var pageControl : UIPageControl = UIPageControl(frame: CGRect(x:50,y: 300, width:200, height:50))
let cellReuseIdentifier = "cell"
override func viewDidLoad()
super.viewDidLoad()
let frameOfScrollView : CGRect = CGRect(x:0, y:0, width:screenWidth, height:screenHeight)
scrollView.frame = frameOfScrollView
scrollView.delegate = self
scrollView.isPagingEnabled = true
tableView.delegate = self
tableView.dataSource = self
self.view.addSubview(scrollView)
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
self.scrollView.contentSize = CGSize(width:self.scrollView.frame.size.width * 4,height: self.scrollView.frame.size.height)
for index in 0..<4
frame.origin.x = self.scrollView.frame.size.width * CGFloat(index)
frame.size = self.scrollView.frame.size
// THIS THING DOESN'T WORK
tableView.frame = frame
self.scrollView .addSubview(tableView)
// THIS THING WORKS
let subView = UILabel(frame: frame)
subView.backgroundColor = colors[index]
subView.text = "how are you?"
self.scrollView .addSubview(subview)
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView)
let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
pageControl.currentPage = Int(pageNumber)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return self.animals.count
// create a cell for each table view row
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell:UITableViewCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as UITableViewCell!
cell.textLabel?.text = self.animals[indexPath.row]
return cell
我做错了什么?我是否错过了任何重新升级 tableview 的内容?
注意:我以编程方式创建了视图,因为我不太了解应该使用哪些约束来向滚动视图添加分页,因为我是 ios 的新手。如果有人可以在自动布局方面为我的问题提供一些解决方案,那将受到欢迎。 基本上目的只是为了实现上面附加的屏幕截图中显示的内容。如果适用,任何替代方法也将不胜感激。
【问题讨论】:
在创建新标签实例时需要创建新的tableview实例 【参考方案1】:无需为UITableview
声明全局变量。
替换 viewDidLoad()
即可满足您的要求。
override func viewDidLoad()
super.viewDidLoad()
let frameOfScrollView : CGRect = CGRect(x:0, y:0, width:screenWidth, height:screenHeight)
scrollView.frame = frameOfScrollView
scrollView.delegate = self
scrollView.isPagingEnabled = true
// tableView.delegate = self
// tableView.dataSource = self
self.view.addSubview(scrollView)
// self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
self.scrollView.contentSize = CGSize(width:self.scrollView.frame.size.width * 4,height: self.scrollView.frame.size.height)
for index in 0..<4
frame.origin.x = self.scrollView.frame.size.width * CGFloat(index)
frame.size = self.scrollView.frame.size
let tableView = UITableView()
tableView.delegate = self
tableView.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
tableView.frame = frame
self.scrollView .addSubview(tableView)
//// // THIS THING DOESN'T WORK
// tableView.frame = frame
// self.scrollView .addSubview(tableView)
// THIS THING WORKS
// let subView = UILabel(frame: frame)
// subView.backgroundColor = colors[index]
// subView.text = "how are you?"
// self.scrollView.addSubview(subView)
替换
let cell:UITableViewCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as UITableViewCell!
与
let cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as UITableViewCell!
删除
let tableView = UITableView()
【讨论】:
以上是关于在启用分页的情况下将表格视图添加到滚动视图。的主要内容,如果未能解决你的问题,请参考以下文章
具有滚动效果的页面视图控制器与启用分页的 UIScrollView