当点击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作为替代。

+0

messages.count绝对大于大于0时,该按钮被窃听 - 和断点似乎表明该代码被执行。超级奇怪。 –

+0

你可以在一个干净的项目上重现你的问题吗?我做了你正在尝试一个新项目,它似乎工作正常。我能想到的最后一个问题是indexPath中的“section:0”部分。你确定这也是正确的吗? – phi

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) 
} 
+0

我很困惑 - scrollView没有在.h文件中声明 - 只有UITableView?我错过了什么吗?例如。当我放下上面的代码时,它说scrollView没有被声明(这是有道理的)? –

+0

让scrollView = tableView.scrollView不存在。由于UITableView从UIScrollView继承,所以你已经有了这个方法 – Andrea

+0

对不起,让我感到困惑的是,我只是给了伪代码来给你引用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]; 
}