UITableView scrolltobottom适用于rowheight == UITableViewAutomaticDimension

时间:2016-04-13 15:14:28

标签: ios uitableview uiscrollview

鉴于此处没有答案 iOS UITableView Scroll to bottom of section 当tableview行的高度变化我正常工作 再问一遍:如何可靠地滚动到桌子的底部? 含义:表格内容的底部排成一行 在表格视图的底部

extension UITableView
{
func scrollToBottom(animated: Bool = true)
{
    layoutSubviews() // if rowHeight UITableViewAutomaticDimension you have to force layout to get semi-correct content size height
    let csh = contentSize.height
    let fsh = bounds.size.height
    if csh > fsh {
        let offset = csh - fsh
        setContentOffset(CGPointMake(0, offset), animated: animated)
    }
}
}

几乎可以正常工作,但仍然低于大约150-200像素 在9.3.1和8.4.1上

让offset = csh

并且很高兴地过度展示了它所包含的内容 如果让offset = csh - fsh 其次是充满虚空的废弃空白

给出了“查看垂直弹跳”的表视图 在故事板中,它恰好在后一种情况下反弹 给予用户触摸最轻微的挑衅; - )

这是非常复杂的,非常类似于机器人

这应该很简单,对吧?正确?

1 个答案:

答案 0 :(得分:0)

scrollToRowAtIndexPath适用于动态高度的单元格。这是一个例子:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var tableView: UITableView!
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 100
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 20
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        cell.textLabel?.numberOfLines = 0
        cell.textLabel?.lineBreakMode = .ByWordWrapping
        cell.textLabel?.text = [String](count: indexPath.row, repeatedValue: "Hello").joinWithSeparator(" ")
        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        let lastRow = tableView.numberOfRowsInSection(0)

        tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: lastRow - 1, inSection: 0), atScrollPosition: .Bottom, animated: true)
    }
}