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

时间:2016-01-05 10:58:50

标签: ios swift uitableview tableviewcell

我正在使用UITableviewcontroller,我希望页脚视图始终保持在屏幕的底部。但是,页脚视图y位置正在根据height的{​​{1}}进行更改。我怎么能一直把它贴在屏幕的底部?

6 个答案:

答案 0 :(得分:5)

tableview页脚视图始终位于tableview的底部,并始终随之滚动。如果您需要将页脚视图固定在底部,则无法使用TableViewController。您必须使用UIViewController,将tableView作为子视图。将页脚也作为另一个子视图并完成。

答案 1 :(得分:0)

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

方法1 :(静态和动态TableView均可用)

在情节提要中添加ViewController,并将页脚视图(或按钮)设置在ViewController的底部。

ContainerView中添加ViewController并设置约束

添加一个UITableViewController并将表视图嵌入到容器视图中

方法2 :(两个动态TableView均可用)

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

您不能在UIViewController中设置静态tableview

答案 2 :(得分:0)

您不能使用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
    }
}

情节提要上的约束如下:

constraints

最终结果是这样

animated

完整的项目代码在这里:

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

答案 3 :(得分:-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
}

答案 4 :(得分:-1)

我遇到了同样的问题,令人惊讶的是Apple没有开箱即用。在这里查看我的答案,无论细胞有多少或细胞有多高,它都会让你的页脚保持在底部https://stackoverflow.com/a/41816730/1553351

答案 5 :(得分:-1)

覆盖现有的 UiTableView 方法

func allowedFooterViewToFloat() -> Bool { 返回真 }