tableView的分割线问题

  • 总所周知tableView的本身分割线我们几乎不用,一种简单的实现方式就是给cell添加一个UIView,然后再设置约束。本文记录另外一种也比较简单的思路
- (void)setFrame:(CGRect)frame
  • 项目中的示例如下图:
示例.png
  • 自己做一下就是下图
cell分割线示例.png
  • 那么怎么比较简单的做出这样的效果呢,上文已经提到只要在自定义cell中重写 - setFrame:(CGRect)frame
- (void)setFrame:(CGRect)frame
{
    frame.size.height -= 20;
    frame.origin.x += 10;
    frame.size.width -= 20;
    [super setFrame:frame];
}
  • 为什么重写- setFrame

    • 重写- setFrame的目的就是:拦截cell设置Frame的过程
  • 我设置的self.tableView.rowHeight = 220; 当在- setFrame中设置frame.size.height -= 20;时高度就会减少20,所以能看到下方tableView的可以当做分割线的背景色。

  • 可能有的疑问1:高度会不会第二次计算就变为200?

    • frame是系统算好以后传过来的,每次都会根据self.tableView.rowHeight = 220,所以每次不会越来越少。
  • 可能有的疑问2:一定要在自定义的cell中设置吗?在控制器的-viewDidAppear中可以吗?

    • 绝对不可以,- viewDidAppear是控制器完全显示之后调用,真实开发过程中我们发请求给服务器,数据可能2秒以后才回来,也就是cell可能2秒以后才有数据,就算你能改掉,那cell循环利用又会回来了,所以不行。

- setFrame其余用处

  • 当自定义控件给别人用时,你不希望别人修改你控件的尺寸,但使用者很有可能不知道尺寸你不希望他设置,所以这个时候就需要在自定义控件中重写- setFrame方法,防止别人改,更严谨的写法是也要重写-setBounds方法.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容