我正在使用UITableviewcontroller
,我希望页脚视图始终位于屏幕的底部。然而,根据y
的height
,页脚视图的tableviewcell
位置正在发生变化。我怎么能一直坚持到屏幕的底部?
tableview
页脚视图将始终保持在tableview
的底部,并始终与它滚动。如果你需要将页脚视图固定在底部,那么你就不能使用TableViewController
。你必须使用UIViewController
,把你的tableView
作为子视图。将页脚也作为另一个子视图并完成。
你不能使用UITableViewController
,但无论如何都没有必要。您可以轻松地将UITableView
添加到常规UIViewController
,并使用自动布局在UIView
下方添加UITableView
。这是一个简单的例子,在UIView
下面添加一个红色的UITableView
:
import UIKit
class MyFooterTableViewController: UIViewController {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
var data = [ "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve"]
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.dataSource = self
}
@IBOutlet weak var tableView: UITableView!
}
extension MyFooterTableViewController: UITableViewDataSource {
// MARK: - Table view data source
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TableCellTest", for: indexPath)
cell.textLabel?.text = data[indexPath.row]
cell.detailTextLabel?.text = "BANANA"
return cell
}
}
Storyboard上的约束如下所示:
最终结果如下:
完整的项目代码在这里:
https://www.dropbox.com/s/pyp42nzumquompp/TableViewFooter.zip?dl=0
页脚始终添加到内容大小的底部。所以我的方法是
方法1 :(适用于静态和动态TableView)
在Storyboard中添加ViewController
并在ViewController
的底部设置页脚视图(或按钮)。
在ContainerView
中添加ViewController
并设置约束
添加UITableViewController
并将tableview嵌入容器视图中
方法2 :(适用于动态TableView)
在底部添加ViewController
,设置页脚视图,添加UITableView并设置自动布局。
您无法在UIViewController中设置静态tableview
Swift Code使footerView填充底部的剩余空间,然后你可以使用autolayout让你在footerView的底部查看:
override func viewDidLayoutSubviews()
{
super.viewDidLayoutSubviews()
guard let footerView = tableView.tableFooterView else
{
return
}
var cellsHeight:CGFloat = tableView.tableHeaderView?.frame.height ?? 0
let sections = self.numberOfSections(in: tableView)
for section in 0..<sections
{
let rows = self.tableView(tableView, numberOfRowsInSection: section)
for row in 0..<rows
{
let indexPath = IndexPath(item: row, section: section)
cellsHeight += self.tableView(tableView, heightForRowAt: indexPath)
}
}
var frame = footerView.frame
frame.size.height = tableView.contentSize.height - cellsHeight;
frame.origin.y = cellsHeight
footerView.frame = frame
}