UITableView左划删除其他cell移动的bug

说一下自己在写项目的时候遇到的一个坑,真的是比较坑呀!有时系统cell的line没法满足需求,一般我都会选择写一个分类修改一个cell的高度就会起到线的效果;结果这个分类在进行cell编辑的时候却让我掉坑里啦!这不我在左划时就出了奇葩的bug!先梳理一下其他知识:

分类

Category的作用
  • 可以在不修改原来类的基础上, 为这个类扩充一些方法
  • 一个庞大的类可以分模块开发
  • 一个庞大的类可以由多个人来编写,更有利于团队合作
Category的使用注意:
  • 分类只能增加方法,不能增加成员变量
  • 在分类方法的实现中可以访问原来类的成员变量
  • 分类中可以重新实现原来类的方法,但是会覆盖原来的方法
  • 方法的调用优先级:分类->原来的类->父类

类的启动过程

+load方法
  • 在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法(只会调用一次)
  • 先加载父类,再加载子类;也就是先调用父类的+load,再调用子类的+load
  • 先加载元原始类,再加载分类
  • 不管程序运行过程有没有用到这个类,都会调用+load加载
+initialize
  • 在第一次使用某个类时(比如创建对象等),只会调用一次+initialize方法
  • 一个类只会调用一次+initialize方法,先调用父类的,再调用子类的

bug是这样的 :


UITableView左划删除其他cell移动的bug_第1张图片

我的分类这样写的:

- (void)setFrame:(CGRect)frame{
    frame.size.height -= 1;
    [super setFrame:frame];
}

如果我把上面分类的代码注释掉,bug 就消失啦!


UITableView左划删除其他cell移动的bug_第2张图片

我滑动一下cell就要执行一次setFrame:
所以会出现cell上移的问题;cell的正常高度应该是44-1;


UITableView左划删除其他cell移动的bug_第3张图片

我多划几次就这样啦:


UITableView左划删除其他cell移动的bug_第4张图片

你可能感兴趣的:(UITableView左划删除其他cell移动的bug)