- 总所周知tableView的本身分割线我们几乎不用,一种简单的实现方式就是给cell添加一个UIView,然后再设置约束。本文记录另外一种也比较简单的思路
- (void)setFrame:(CGRect)frame
- 项目中的示例如下图:
- 自己做一下就是下图
- 那么怎么比较简单的做出这样的效果呢,上文已经提到只要在自定义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方法.