tableview直接滚动至最后一行的问题

tableview直接滚动至最后一行

类似聊天界面,tableview应该直接显示在最后一行,并且不应该有滚动的出现。

在网上查了很久,直接滚动至最后一行很容易实现,有两种方法比较好。

1. 调用scrollToRowAtIndexPath方法

 -(void) scrollBottom
 {
     if ([self.messageData count]) {   //messageData是数据源
         NSIndexPath *indexPath=[NSIndexPath indexPathForRow:self.messageData.count-1 inSection:0];
         [self.chatTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
     }
 }

2. 改变ContentOffset

self.chatTableView setContentOffset:CGPointMake(0, self.chatTableView.contentSize.height -self.chatTableView.bounds.size.height) animated:YES];

不过接下来会遇到一个问题,在什么时候调用它们。

第一种方法在viewDidLoad和viewWillAppear中不能调用,因为那个时候cell还没生成,会报错,那么在viewDidAppear中调用是可行的,但这样用户点击进去能看到一个下滑的动作,并不好

第二种方法也一样,在viewDidLoad和viewWillAppear中调用没有效果,只有在viewDidAppear中调用,这样也一样有个下滑的动作。

解决方法

最后发现了问题的所在,移动到最后一行只是一个方法而已,点击去滚动条直接在最后一行和这个没有必然的联系。

这个要看上个页面是通过什么方法进入这个controller的,一般是两种方法。

1. 通过segue进来,那么默认就是拉倒了最后一行。

2.通过storyboard初始化viewcontroller然后push,就没有直接拉倒最后一行。我就是用这种方法的,最后的解决办法不是很好,是在

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath这个方法里添加:

if (self.isFirst) {
        [self scrollBottom]; 
self.isFirst = NO;
}

这样只有点进去的时候会执行,此时页面还没有appear,所以没有下滑的动作就显示在了最后一行

 

转载于:https://www.cnblogs.com/stevenfukua/p/4586001.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值