-
從iOS7.0開始, tableViewCell的分隔線總會在左側(cè)留意下一點(diǎn)小間距, 這是蘋果更新系統(tǒng)之后鬧出的幺蛾子
- 其實這個情況在某種意義上看上去比較美觀, 因為人的視覺習(xí)慣是從左往右看, 并且咱們使用Cell的時候, 也總是把重要的東西放在最左側(cè), 留出的這一點(diǎn)小間距會讓視覺效果上稍微舒服一點(diǎn)
- 鄙人是不大喜歡一整條線擺在上面的....
- 但是出于大眾口味, 以及產(chǎn)品大大的需求, 我們又不得不想辦法給他弄回去
-
處理方法一: 簡單暴力的劃線方法
-
取消TableViewCell的分隔線
- (void)viewDidLoad { [super viewDidLoad]; // 取消分隔線 self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; }
-
加載Cell的時候, 創(chuàng)建一個與屏幕等寬, 高度為1的UIView, 然后把它的顏色換成tableView的背景色, 放在Cell的最下方, 人為創(chuàng)造一個分隔線的效果
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { UIView *separatorView = [[UIView alloc] initWithFrame:CGRectMake(0, cell.frame.size.height - 1, FHScreenW, 1)]; separatorView.backgroundColor = FHBackgroundColor; [cell.contentView addSubview:separatorView]; }
-
一些注意點(diǎn)
- 分隔線最好在ViewDidLoad中就取消掉他
- 如果要給Cell添加一些不需要約束的控件, 最好使用上面的方法, 在Cell即將顯示出來的時候, 再添加上去
- 如果在別的方法里面添加, 根據(jù)Cell的復(fù)用機(jī)制, 以及一些控件是在Cell加載完畢之后還做一些約束調(diào)整, 這樣就會導(dǎo)致你加上去的分隔線出現(xiàn)一些異常, 鄙人真的被這個問題坑過!!!!
-
-
處理方法二: 使用Cell的setFrame方法
該方法仍舊用的一些假象來制造分隔線的效果, 區(qū)別是這次不用添加一些亂起八糟的假分隔線, 而是直接操作Cell的高度
-
首先, 根據(jù)你想要的分隔線的顏色, 設(shè)置tableVIew的背景顏色, 并且要隱藏掉原來的分隔線
- (void)viewDidLoad { [super viewDidLoad]; // 1. 背景顏色 self.tableView.backgroundColor = FHBackgroundColor; // 2. 取消分隔線 self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; }
-
然后, 在自定義Cell的類里面, 重寫
setFrame:
方法, 先將高度 -1, 然后再調(diào)用[super setFrame]
- (void)setFrame:(CGRect)frame { frame.size.height -= 1; [super setFrame:frame]; }
-
此時, 你的Cell之間應(yīng)該已經(jīng)有分隔線的效果了, 但是你會發(fā)現(xiàn)你的Cell高度有一些別扭, 好像被擠壓了一般
其實這是因為Cell內(nèi)容的約束已經(jīng)計算好了, 而你手動給Cell的高度 -1, 這時就會讓Cell產(chǎn)生一些變化
-
因此你需要設(shè)置Cell高度的時候, 給他額外設(shè)置你準(zhǔn)備減去的高度數(shù)值
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // 額外給1點(diǎn)的高度值, 為了不讓cell高度-1對cell的視覺產(chǎn)生影響 return 71; }
-
注意點(diǎn):
- 鄙人不是很推薦這個方法, 因為他比較繁瑣, 而且只能對自定義Cell有作用
- 在使用上暫時沒有發(fā)現(xiàn)什么問題, 但用起來總是覺得很別扭, 畢竟你是修改了系統(tǒng)已經(jīng)計算好的東西
- 還是那句老話, 盡量不要隨便更改系統(tǒng)給你弄好的東西, 除非你知道自己在干什么!!!
-
處理方法三: 操作系統(tǒng)的方法
此方法比較簡單, 相對穩(wěn)定, 都是操作系統(tǒng)給定的方法, 因此比較安全
-
首先, 要讓tableView的分隔線內(nèi)邊距歸零
// 此方法在iOS7.0就可以使用了, 除非你的App要求iOS6.0適配.... self.tableView.separatorInset = UIEdgeInsetsZero;
-
然后, 在添加Cell的時候, 要讓Cell的邊距約束也歸零(在iOS8之后, 蘋果又對分隔線做了一次手腳, 讓其左邊留出一點(diǎn)空間)
注意, 此方法是在iOS8.0之后才推出的, 如果你直接使用該方法, 但是設(shè)備為iOS7.0, 你的App就會崩潰
-
因此一定不要忘記做一次系統(tǒng)適配
UIDevice *device = [UIDevice currentDevice]; if (device.systemVersion.floatValue >= 8.0) { cell.layoutMargins = UIEdgeInsetsZero; }
-
通過如上兩個步驟, 分隔線就已經(jīng)設(shè)置完畢了, 此方法鄙人覺得是比較穩(wěn)定可靠的方法, 但是根據(jù)文檔顯示, 如果修改了layoutMargins這個屬性, 應(yīng)該調(diào)用一下-layoutMarginsDidChange這個方法
- 希望有仔細(xì)研究過的大神給個一知半解, 小弟在此感謝
UITableViewCell分隔線左右對齊的小方法
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門护糖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褥芒,“玉大人椅文,你說我怎么就攤上這事喂很。” “怎么了少辣?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長漓帅。 經(jīng)常有香客問我锨亏,道長,這世上最難降的妖魔是什么器予? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮捐迫,結(jié)果婚禮上乾翔,老公的妹妹穿的比我還像新娘施戴。我一直安慰自己反浓,他們只是感情好赞哗,可當(dāng)我...
- 文/花漫 我一把揭開白布雷则。 她就那樣靜靜地躺著肪笋,像睡著了一般月劈。 火紅的嫁衣襯著肌膚如雪藤乙。 梳的紋絲不亂的頭發(fā)上猜揪,一...
- 文/蒼蘭香墨 我猛地睜開眼送丰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起俐载,我...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡意敛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年膛虫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稍刀。...
- 正文 年R本政府宣布纲刀,位于F島的核電站,受9級特大地震影響示绊,放射性物質(zhì)發(fā)生泄漏锭部。R本人自食惡果不足惜面褐,卻給世界環(huán)境...
- 文/蒙蒙 一拌禾、第九天 我趴在偏房一處隱蔽的房頂上張望展哭。 院中可真熱鬧湃窍,春花似錦、人聲如沸您市。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春榕莺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钉鸯。 一陣腳步聲響...
- 正文 我出身青樓及塘,卻偏偏與公主長得像莽使,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芳肌,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 一般TableView設(shè)置全屏分隔線有下面三種方法 1.自定義cell,手動添加分割線 隱藏自帶的tableVie...
- 引發(fā)問題:在使用tableView的時候發(fā)現(xiàn), cell下面的分隔線居然不是全屏的! 每個cell前面都有一段差距...
- UIView+SGFrame.h #import @interface UIView (SGFrame) @pro...
- 首先系統(tǒng)的分隔線有以下幾種 自定義分隔線(首先要隱藏系統(tǒng)的分隔線) 通過xib或者代碼在cell底部添加一條高度為...
- Github地址:-CollectionViewLayout-CollectionViewFlowLayout- ...