iOS tableView在出现时自动滚动到底部(不闪动,无痕)

在做关于聊天等一些app的时候,会有进入聊天页面时,需要将UITableView滑动到底部的操作,即显示最新的消息,有以下几种方法:

1、在viewDidAppear中设置tableView的contentOffSet

[self.tableView setContentOffset:CGPointMake(0, self.tableView.contentSize.height - self.tableView.frame.size.height) animated:YES];

2、在viewDidAppear中设置滑动到底部

NSIndexPath *indexpath = [NSIndexPath indexPathForRow:self.chatData.count-1 inSection:0]; 
[self.tableView scrollToRowAtIndexPath:indexpath atScrollPosition:UITableViewScrollPositionBottom animated:NO]; 

上面这两种方法都可以实现滑动到底部,但是如果animated设置为YES,则会出现滚动现象,如果animated设置为NO,则会出现闪动现象,都会影响用户的体验,因此不推荐这两种方法

3、在TableView的numberOfRowsInSection方法中设置contentOffSet(推荐方法)

tableView在执行numberOfRowsInSection的代理的时候,已经确定了tableView的Contentsize,因此可以设置tableView的contentOffSet来实现滑动到底部。
但是要注意的是,只有在初始化的时候执行,之后再收到消息或者刷新tableView的时候,不再执行

 if (self.isScrollBottom) { //只在初始化的时候执行
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.005 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
         if (self.chatData.count > 0) {

            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:([self.tableView numberOfRowsInSection:0]-1) inSection:0];
            [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];
    });

        }
- (void)viewDidAppear {
    self.scrollBottom = NO;
}

这种方法要加一个延时,不然会造成死循环。
在viewDidAppear中将属性改为NO

4、在网络请求结束的时候,滑动到底部 (推荐)

// 滚动到最底部
-(void)scrollToBottom {
    if (self.chatData.count > 0) {
        if ([self.tableView numberOfRowsInSection:0] > 0) {
            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:([self.tableView numberOfRowsInSection:0]-1) inSection:0];
            [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];
        }
    }
}

这种方法在有loading框的时候,可以使用,但是在没有loading框的时候,就会有明显的闪动效果,所以可以根据实际情况来使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,222评论 3 119
  • 冬天来了,天气也冷了。天空飘荡着纷飞的雪花,地上,山上,树上,房子上......白茫茫一片,银装素裹,漂亮异常。虽...
    安若静儿阅读 484评论 0 1
  • 嗨,是我。其实也没有好久不见,可是会觉得隔了很久呐,放心,我不会纠缠的,慢慢看完吧。 首先,这样跟你说话是我能想到...
    任良生阅读 314评论 0 0
  • 保养胃经的最佳方法和时间 胃经位于人体正面,从头至脚的一条线路。对于胃经,可采取拍打剌激的方式梳理经络气血,脸上重...
    南悔阅读 2,154评论 0 0
  • Dear Charming, You are six months old today.Mummy and Da...
    唐唐_6438阅读 764评论 0 1

友情链接更多精彩内容