关于 UITableView 的 willDisplayCell

willDisplayCellUITableView 的一个代理方法,自定义显示的方法一共有如上几个。说到willDisplayCell,很多人会把它和cellForRowAtIndexPath做对比。

通过打断点发现,tableview 中先走cellForRowAtIndexPath方法,然后再走willDisplayCell方法。网上很多人建议,对于数据绑定填充放到willDisplayCell中执行。但是通过试验,一般情况下,在cellForRowAtIndexPath中进行数据绑定填充,并不会造成卡顿和过度消耗性能的情况。特别复杂的 cell 除外。

willDisplayCell平时用的最多的是自定义 UITableView 分割线。系统默认情况下,UITableView 的分割线左边是没有置顶的。打印它的 inset 可以得到值为 {0, 15, 0, 0}

NSLog(@"%@", NSStringFromUIEdgeInsets(tableView.separatorInset));

如果想要分割线左右两边都顶格,有两个方法。

  • 方法一
- (void)viewDidLayoutSubviews {
    if ([_tableView respondsToSelector: @selector(setSeparatorInset:)]) {
        [_tableView setSeparatorInset:UIEdgeInsetsZero];
    }
    if ([_tableView respondsToSelector: @selector(setLayoutMargins:)])  {
        [_tableView setLayoutMargins:UIEdgeInsetsZero];
    }
}
  • 方法二
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}

方法一只能修改整体分割线,如果要针对不同的 cell 设置不同的分割线,方法二比较适用。以后面对各种 cell 都不需要在自定义时再去拖个 view 画个分割线上去了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 一、简介 <<UITableView(或简单地说,表视图)的一个实例是用于显示和编辑分层列出的信息的一种手段 <<...
    无邪8阅读 10,736评论 3 3
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,267评论 4 61
  • 序引 本系列文章将介绍iOS开发中的UITableView控件,将会分成四篇文章完整的讲述UITableView的...
    yetCode阅读 2,304评论 3 40
  • 我们在上一篇《通过代码自定义不等高cell》中学习了tableView的相关知识,本文将在上文的基础上,利用sto...
    啊世ka阅读 1,561评论 2 7