如何让footerview始终位于UITableViewController的底部?

问题描述 投票:8回答:6

我正在使用UITableviewcontroller,我希望页脚视图始终位于屏幕的底部。然而,根据yheight,页脚视图的tableviewcell位置正在发生变化。我怎么能一直坚持到屏幕的底部?

ios swift uitableview tableviewcell
6个回答
6
投票

tableview页脚视图将始终保持在tableview的底部,并始终与它滚动。如果你需要将页脚视图固定在底部,那么你就不能使用TableViewController。你必须使用UIViewController,把你的tableView作为子视图。将页脚也作为另一个子视图并完成。


1
投票

你不能使用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上的约束如下所示:

constraints

最终结果如下:

animated

完整的项目代码在这里:

https://www.dropbox.com/s/pyp42nzumquompp/TableViewFooter.zip?dl=0


0
投票

页脚始终添加到内容大小的底部。所以我的方法是

方法1 :(适用于静态和动态TableView)

在Storyboard中添加ViewController并在ViewController的底部设置页脚视图(或按钮)。

ContainerView中添加ViewController并设置约束

添加UITableViewController并将tableview嵌入容器视图中

方法2 :(适用于动态TableView)

在底部添加ViewController,设置页脚视图,添加UITableView并设置自动布局。

您无法在UIViewController中设置静态tableview


-1
投票

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
}
© www.soinside.com 2019 - 2024. All rights reserved.