- 總所周知tableView的本身分割線(xiàn)我們幾乎不用金蜀,一種簡(jiǎn)單的實(shí)現(xiàn)方式就是給cell添加一個(gè)UIView渡讼,然后再設(shè)置約束。本文記錄另外一種也比較簡(jiǎn)單的思路
- (void)setFrame:(CGRect)frame
- 項(xiàng)目中的示例如下圖:
示例.png
- 自己做一下就是下圖
cell分割線(xiàn)示例.png
- 那么怎么比較簡(jiǎn)單的做出這樣的效果呢页眯,上文已經(jīng)提到只要在自定義cell中重寫(xiě) - setFrame:(CGRect)frame
- (void)setFrame:(CGRect)frame
{
frame.size.height -= 20;
frame.origin.x += 10;
frame.size.width -= 20;
[super setFrame:frame];
}
-
為什么重寫(xiě)- setFrame
- 重寫(xiě)- setFrame的目的就是:攔截cell設(shè)置Frame的過(guò)程
我設(shè)置的self.tableView.rowHeight = 220; 當(dāng)在- setFrame中設(shè)置frame.size.height -= 20;時(shí)高度就會(huì)減少20系宫,所以能看到下方tableView的可以當(dāng)做分割線(xiàn)的背景色。
-
可能有的疑問(wèn)1:高度會(huì)不會(huì)第二次計(jì)算就變?yōu)?00尘惧?
- frame是系統(tǒng)算好以后傳過(guò)來(lái)的康栈,每次都會(huì)根據(jù)self.tableView.rowHeight = 220,所以每次不會(huì)越來(lái)越少喷橙。
-
可能有的疑問(wèn)2:一定要在自定義的cell中設(shè)置嗎啥么?在控制器的-viewDidAppear中可以嗎?
- 絕對(duì)不可以贰逾,- viewDidAppear是控制器完全顯示之后調(diào)用悬荣,真實(shí)開(kāi)發(fā)過(guò)程中我們發(fā)請(qǐng)求給服務(wù)器,數(shù)據(jù)可能2秒以后才回來(lái)疙剑,也就是cell可能2秒以后才有數(shù)據(jù)氯迂,就算你能改掉,那cell循環(huán)利用又會(huì)回來(lái)了言缤,所以不行嚼蚀。
- setFrame其余用處
- 當(dāng)自定義控件給別人用時(shí),你不希望別人修改你控件的尺寸管挟,但使用者很有可能不知道尺寸你不希望他設(shè)置轿曙,所以這個(gè)時(shí)候就需要在自定義控件中重寫(xiě)- setFrame方法,防止別人改僻孝,更嚴(yán)謹(jǐn)?shù)膶?xiě)法是也要重寫(xiě)-setBounds方法.