UITableViewCell分隔線左右對齊的小方法

  1. 從iOS7.0開始, tableViewCell的分隔線總會在左側(cè)留意下一點(diǎn)小間距, 這是蘋果更新系統(tǒng)之后鬧出的幺蛾子

    • 其實這個情況在某種意義上看上去比較美觀, 因為人的視覺習(xí)慣是從左往右看, 并且咱們使用Cell的時候, 也總是把重要的東西放在最左側(cè), 留出的這一點(diǎn)小間距會讓視覺效果上稍微舒服一點(diǎn)
    • 鄙人是不大喜歡一整條線擺在上面的....
    • 但是出于大眾口味, 以及產(chǎn)品大大的需求, 我們又不得不想辦法給他弄回去
  2. 處理方法一: 簡單暴力的劃線方法

    1. 取消TableViewCell的分隔線

       - (void)viewDidLoad {
           [super viewDidLoad];
           
           // 取消分隔線
           self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
       }
      
    2. 加載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];
       }
      
    3. 一些注意點(diǎn)

      • 分隔線最好在ViewDidLoad中就取消掉他
      • 如果要給Cell添加一些不需要約束的控件, 最好使用上面的方法, 在Cell即將顯示出來的時候, 再添加上去
      • 如果在別的方法里面添加, 根據(jù)Cell的復(fù)用機(jī)制, 以及一些控件是在Cell加載完畢之后還做一些約束調(diào)整, 這樣就會導(dǎo)致你加上去的分隔線出現(xiàn)一些異常, 鄙人真的被這個問題坑過!!!!
  3. 處理方法二: 使用Cell的setFrame方法

    1. 該方法仍舊用的一些假象來制造分隔線的效果, 區(qū)別是這次不用添加一些亂起八糟的假分隔線, 而是直接操作Cell的高度

    2. 首先, 根據(jù)你想要的分隔線的顏色, 設(shè)置tableVIew的背景顏色, 并且要隱藏掉原來的分隔線

       - (void)viewDidLoad {
           [super viewDidLoad];
       
           // 1. 背景顏色
           self.tableView.backgroundColor = FHBackgroundColor;
           
           // 2. 取消分隔線
           self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
       }   
      
    3. 然后, 在自定義Cell的類里面, 重寫setFrame:方法, 先將高度 -1, 然后再調(diào)用[super setFrame]

       - (void)setFrame:(CGRect)frame {
           
           frame.size.height -= 1;
       
           [super setFrame:frame];
       }
      
    4. 此時, 你的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;
          }
        
    5. 注意點(diǎn):

      • 鄙人不是很推薦這個方法, 因為他比較繁瑣, 而且只能對自定義Cell有作用
      • 在使用上暫時沒有發(fā)現(xiàn)什么問題, 但用起來總是覺得很別扭, 畢竟你是修改了系統(tǒng)已經(jīng)計算好的東西
      • 還是那句老話, 盡量不要隨便更改系統(tǒng)給你弄好的東西, 除非你知道自己在干什么!!!
  4. 處理方法三: 操作系統(tǒng)的方法

    1. 此方法比較簡單, 相對穩(wěn)定, 都是操作系統(tǒng)給定的方法, 因此比較安全

    2. 首先, 要讓tableView的分隔線內(nèi)邊距歸零

       // 此方法在iOS7.0就可以使用了, 除非你的App要求iOS6.0適配....
       self.tableView.separatorInset = UIEdgeInsetsZero;
      
    3. 然后, 在添加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;
          }               
        
    4. 通過如上兩個步驟, 分隔線就已經(jīng)設(shè)置完畢了, 此方法鄙人覺得是比較穩(wěn)定可靠的方法, 但是根據(jù)文檔顯示, 如果修改了layoutMargins這個屬性, 應(yīng)該調(diào)用一下-layoutMarginsDidChange這個方法

      • 希望有仔細(xì)研究過的大神給個一知半解, 小弟在此感謝
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛉腌,一起剝皮案震驚了整個濱河市只厘,隨后出現(xiàn)的幾起案子烙丛,更是在濱河造成了極大的恐慌羔味,老刑警劉巖河咽,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赋元,死亡現(xiàn)場離奇詭異忘蟹,居然都是意外死亡搁凸,警方通過查閱死者的電腦和手機(jī)媚值,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門护糖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褥芒,“玉大人椅文,你說我怎么就攤上這事喂很。” “怎么了少辣?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長漓帅。 經(jīng)常有香客問我锨亏,道長,這世上最難降的妖魔是什么器予? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮捐迫,結(jié)果婚禮上乾翔,老公的妹妹穿的比我還像新娘施戴。我一直安慰自己反浓,他們只是感情好赞哗,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布雷则。 她就那樣靜靜地躺著肪笋,像睡著了一般月劈。 火紅的嫁衣襯著肌膚如雪藤乙。 梳的紋絲不亂的頭發(fā)上猜揪,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天湾盒,我揣著相機(jī)與錄音湿右,去河邊找鬼。 笑死毅人,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尖殃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼送丰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起俐载,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎遏佣,沒想到半個月后挖炬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體状婶,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡意敛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年膛虫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稍刀。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡撩独,死狀恐怖掉丽,靈堂內(nèi)的尸體忽然破棺而出跌榔,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布纲刀,位于F島的核電站,受9級特大地震影響示绊,放射性物質(zhì)發(fā)生泄漏锭部。R本人自食惡果不足惜面褐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一拌禾、第九天 我趴在偏房一處隱蔽的房頂上張望展哭。 院中可真熱鬧湃窍,春花似錦、人聲如沸您市。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春榕莺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钉鸯。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工吧史, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亏拉,地道東北人扣蜻。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓及塘,卻偏偏與公主長得像莽使,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芳肌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容