你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS8 UITableView 分割條設置separator intent = 0 不起作用

iOS8 UITableView 分割條設置separator intent = 0 不起作用

編輯:IOS開發綜合

ios7的時候在storyboard 設置 TableView的separator intend = 0 可以讓tableview的分割條頂到頭。

但是,升級了iOS8時,發現不起作用了。

經過google,在 stackoverflow 發現了答案

翻譯紀錄一下

iOS8 在cell和tableview中都引入了layoutMargins屬性,而且這個屬性在iOS 7中並沒有,所以你需要區別對待這兩個版本。

使用 Ricky 的方案設置cell中的layoutMargin屬性:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }

    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }

//按照作者最後的意思還要加上下面這一段

if([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]){

[cell setPreservesSuperviewLayoutMargins:NO];

}

}

你還需要在tableview中設置同樣的屬性. 通過多次試驗,我發現你可以在viewDidLayoutSubviews.中設置這個屬性

把下面代碼拷貝到你的view的實現中

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [self.tableView setSeparatorInset:UIEdgeInsetsZero];
    }

    if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
        [self.tableView setLayoutMargins:UIEdgeInsetsZero];
    }
} 

這樣,在ios7,ios8中都可以實現分割條頂頭的需求了。(譯者:ios6缺省是頂頭的,因此這個方案可以適用於ios6-8).

Edit: 按照 @bffmike 在 Twitter 上所說, 你可能還需要在cell中設置 preservesSuperviewLayoutMargins=NO . 再次說明:每個人的情況因人而異.

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved