当点击uibutton时,以编程方式滚动到tableView底部
当我的View(包含Table View)加载时,我希望它滚动到表格视图的底部。这很好。但是,当我点击一个按钮(sendReply)时,我也希望tableView滚动到底部。出于某种原因,当视图最初加载时,滚动到tableView的底部工作,但是当我将它放在我的sendReply动作中时,[self bottomScroll:self]似乎不会触发?当点击uibutton时,以编程方式滚动到tableView底部
.M
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self bottomScroll:self];
}
- (void)bottomScroll:(id)sender {
if (self.messages.count > 0)
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.messages.count-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}
- (IBAction)sendReply:(id)sender {
[self bottomScroll:self];
}
这应该工作。当你点击按钮时,你确定messages.count
是否大于0?你可以在该行设置一个断点,看看这段代码是否被执行。
您也可以尝试-scrollRectToVisible
作为替代。
phi指出scrollRectToVisible将是我会走的路。调用你的tableView的滚动视图传递你想要显示的按钮的矩形。自从我使用obj-c已经有一段时间了,但是:
-(IBAction)sendReply: (id)sender {
[scrollView scrollRectToVisible: sendReply.frame, animated: YES]
}
?在那里的语法可能是错误的,但它应该足够接近你的目的地。
在SWIFT:
@IBAction func sendReply(sender: UIButton/AnyObject) -> Void {
let scrollView = tableView.scrollView
scrollView.scrollrectToVisible(_ rect: sender.frame, animated: true)
}
我很困惑 - scrollView没有在.h文件中声明 - 只有UITableView?我错过了什么吗?例如。当我放下上面的代码时,它说scrollView没有被声明(这是有道理的)? –
让scrollView = tableView.scrollView不存在。由于UITableView从UIScrollView继承,所以你已经有了这个方法 – Andrea
对不起,让我感到困惑的是,我只是给了伪代码来给你引用tableView里面的scrollView的想法 –
它根据您的描述似乎有些奇怪。需要更多代码才能找到正在发生的事情。可以推断的是你想要将最后一个单元格滚动到底部。因此,请确保tableview的内容大小比垂直方向大。
试试这个
if (self.tableView.contentSize.height > self.tableView.frame.size.height){
CGPoint point = CGPointMake(0, self.tableView.contentSize.height - self.tableView.frame.size.height);
[self.tableView setContentOffset:point];
}
messages.count绝对大于大于0时,该按钮被窃听 - 和断点似乎表明该代码被执行。超级奇怪。 –
你可以在一个干净的项目上重现你的问题吗?我做了你正在尝试一个新项目,它似乎工作正常。我能想到的最后一个问题是indexPath中的“section:0”部分。你确定这也是正确的吗? – phi