最近在写一个聊天的框架,遇到一个奇葩的问题,就是发送聊天记录的时候(需要tableView上移,显示出最新的记录),增加一条记录无疑需要reload一下(大家都明白的),这是就会出现头疼的问题,页面显示的位置有偏差,并且会出现快闪的的现象(貌似是contentoffset被设置了多次造成的结果)。以下是我的代码:

这是需要显示最新记录,设置的contentoffset值(tableMoveY的值是正确的哦,不必怀疑)

这是增加记录刷新页面

貌似是没有什么问题的,但是......

----------------------------------------------华丽的分割线----------------------------------------

其实一般情况下调用reloadData时tableView的 contentoffset是不会变的,但是如果table里面cell的数目发生的改变,如增加了一个cell,并且无法从重用队列中找到时,talbeView会重排结构,contentoffset会清零(看清楚了,所以我的页面会出现快闪的问题)。并且这一过程是需要时间的,如果在上述动作尚未完成之前又去设置与table相关的动画(例如:

),会引起冲突,从而导致重排后的tableView的布局与预期出现偏差的情况。故,解决上述问题还可将设置tableView的contentoffset的动作延后或者放到UIView的动画回调中(,因为原理上是一样的,都避开了tableView本身重排的时间。

在回调里写这样其实还是会出现页面快闪的问题)

所以大家可以将animated动画设置为NO,反正我的问题是解决咯。。。。你也可以试试

UITableView在设置contentOffset的同时也reload,造成tableView的contentOffset偏差的更多相关文章

  1. 使用storyboard显示UITableView时,如果不修改系统默认生成的tableView:cellForRowAtIndexPath:方法中的代码,则必须为UITableViewCell注册(填写)重用标识符:identifier.必须要代码方法中的标识符一致.

    CHENYILONG Blog 使用storyboard显示UITableView时,如果不修改系统默认生成的tableView:cellForRowAtIndexPath:方法中的代码,则必须为UI ...

  2. Swift - UIView,UItableView,Cell设置边框方法

    // 设置边框的宽度 cell.layer.borderWidth = 1 // 设置边框的颜色 cell.layer.borderColor = UIColor.blackColor().CGCol ...

  3. UITableView 如何设置背景颜色

    http://blog.sina.com.cn/s/blog_6734cee201011kya.html 原因:1.backgroundView 属性不为nil,所有设置backgroundColor ...

  4. UITableView出现卡顿如何处理

    tableView的beginUpdate和endUpdate要比reloadData和reloadRowsAtIndexPaths好,因为beginUpdate和endUpdate会执行一个动画bl ...

  5. 在使用NavigationController情况下的布局的Y轴的起始位置

    在有的时候,当一个ViewController被push进一个NavigationController的时候,view上会有一个高度为64的NavigationBar(除非主动隐藏了Navigatio ...

  6. iOS设置tableViewCell之间的间距(去掉UItableview headerview黏性)

    经常在项目中遇到自定义cell的情况,而且要求cell之间有间距,但是系统没有提供改变cell间距的方法,怎么办? 方法1:自定义cell的时候加一个背景View,使其距离contentView的上下 ...

  7. UITableView设置cell为不可选?

    本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术.本文将为读者讲解UITableView如何设置单 ...

  8. iOS8 UITableView 分割条设置separator intent = 0 不起作用

    转自:http://blog.csdn.net/ljb_wh/article/details/40788333 ios7的时候在storyboard 设置 TableView的separator in ...

  9. (iOS)关于UITableView设置contentsize(原创)

    由于UITableView是继承自UIScrollView的,所以他是可以设置contentsize的. 但是,我在试验的过程中,初始化UITableView实例后,直接设置它的contentsize ...

随机推荐

  1. winform刷新UI界面

    this.Invoke(new Action(() => { // 更新使用次数 this.labCount.Text = count; }));

  2. C#中时间的比较

    项目中需求,要求一个线程必须待够一定时间才允许停止,那么就涉及到一个时间的比较与线程的sleep var threadTimeOut= DateTime.Now.AddMinutes(timeOutN ...

  3. 11月15日下午 ajax返回数据类型为XML数据的处理

    ajax返回数据类型为XML数据的处理 /*XML:可扩展标记语言 HTML:超文本标记语言 标签:<标签名></标签名> 特点: 1.必须要有一个根 2.标签名自定义 3.对 ...

  4. Spring系列之谈谈对Spring IOC的理解

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IOC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  5. javaweb学习总结(五)——Servlet开发(一)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  6. 【C语言入门教程】目录/大纲

    第一章 C语言编程基础 1.1 基本程序结构 1.2 函数库 和 链接 1.3 C语言“32个”关键字 第二章 数据类型.运算符和表达式 2.1 数据类型(5种基本数据类型),聚合类型与修饰符 2.2 ...

  7. css动画 animation

    今天用css做了一个简单的三角上下移动的一个小动画,说白了就是在改变该物体的height值.除了这个方法,还可以用js. 一.在用css写动画时,一定要记住兼容性问题.如何解决该兼容性?在前面加内核前 ...

  8. parse_str怎么用php

    1.需求 了解parse_str的用法 2.作用 parse_str接受2个参数,把第一个参数查询字符串解析到第二个参数数组当中,会覆盖数组中原来的值 parse_str($_SERVER['QUER ...

  9. 及时取消代码中的AsyncTask

    在一个Activity页面,如果发起了AsyncTask任务,然后页面离开/销毁了,此时如果doInBackground没执行完,会有两个问题: 1, AsyncTask白白消耗资源,结果已经用不上了 ...

  10. HTML5和HTML4的主要区别 [转]

    原文:http://www.cnblogs.com/jiangyehu1110/archive/2013/07/10/3182277.html 1. HTML5标准还在制定中 这头一个不同之处显而易见 ...