如何开始UITableView
滚动到最后一个单元格?
只有一个普通的UITableView(frame: CGRectZero, style: UITableViewStyle.Plain)
,当它出现在屏幕上时,会一直向下滚动到底部。
我试过了:
// 1
reloadData()
scrollToRowAtIndexPath(
NSIndexPath(forItem: dataArray.count-1, inSection: 0),
atScrollPosition: .Top, animated: false
)
// 2
reloadData()
var contentOffset = self.contentOffset
contentOffset.y = CGFloat.max
setContentOffset(contentOffset, animated: false)
在tableView的init
方法(在我的子类中)
我也尝试过经典的CGAffineTransformMakeScale(1,-1)
黑客攻击,但是这会让我的手机部分粘到底部,我希望它们能够顶住(但滚动到底部)。 (只有当我没有填充整个UITableView
空间的小区时才有用)
编辑:另一个细节,我正在使用动态单元UITableViewAutomaticDimension
。
答案 0 :(得分:2)
这将滚动到底部而不会出现任何故障,但如果您使用Tableview滚动到行属性,则会出现故障。
Swift 3 使用
self.TableView.reloadData() // To populate your tableview first
//Since we have to wait until the table is reload
DispatchQueue.main.async {
let bottomOffset = CGPoint(x: 0, y: self.TableView.contentSize.height - self.TableView.frame.size.height)
self.TableView.setContentOffset(bottomOffset, animated: false)
}
目标C 使用
[YourTableView reloadData]; // To populate your tableview first
[YourTableView setContentOffset:CGPointMake(0, YourTableView.contentSize.height - YourTableView.frame.size.height)];
答案 1 :(得分:1)
编辑:
动画:false
func scrollBottom() {
let lastIndex = NSIndexPath(forRow: dataArray.count-1, inSection: 0)
self.tableView.scrollToRowAtIndexPath(lastIndex, atScrollPosition: UITableViewScrollPosition.Bottom, animated: false)
}
测试代码:
import UIKit
class TableViewController: UITableViewController {
var goButton = UIButton()
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
goButton = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
goButton.backgroundColor = UIColor.blueColor()
goButton.addTarget(self, action: #selector(TableViewController.scrollBottom), forControlEvents: .TouchUpInside)
self.view.addSubview(goButton)
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 500
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel?.text = "Hello, World!"
return cell
}
func scrollBottom() {
let lastIndex = NSIndexPath(forRow: 499, inSection: 0)
self.tableView.scrollToRowAtIndexPath(lastIndex, atScrollPosition: UITableViewScrollPosition.Bottom, animated: false)
}
}