iOS7 分割線短 15 像素(廢棄)解決方法

原文出自:http://blog.csdn.net/lengshengren/article/details/19335637


爲什麼說是少了15像素呢?

首先我們拖拽一個默認的tableview 控件! 看下xcode5 面板的inspector(檢查器)

我們可以找到一個 Separator Insetss 標籤 默認是 Default

我們選擇一下 發現有個Custom  這時候我們驚奇的發現Left  15  ,這時候我們只要把這個 15  改成 0 , 然後保存, 你就會發現tableview 的分割線跟以前一樣了。


有些朋友問了如果是代碼寫的tableview 的呢。

下面我們接着分析這個問題,讓我們查詢下 tableview delegate  我們會發現 ios7 增加了一些新屬性,

@property (nonatomic)         UIEdgeInsets                separatorInset       NS_AVAILABLE_IOS(7_0)UI_APPEARANCE_SELECTOR;// allows customization of the frame of cell separators


這個時候你應改發現separatorInset 這個單詞是否有點眼熟,  蘋果公司已經給了註釋,可以自定義視cell 的分割線,

UIEdgeInsets 是個結構體類型,這時候我們發現了我們要的屬性 left

typedef struct UIEdgeInsets {

    CGFloat top, left, bottom, right; // specify amount to inset (positive) for each of the edges. values can be negative to 'outset'

} UIEdgeInsets;


現在我們可以用代碼調用下面這個方法,

    [myTableView setSeparatorInset:UIEdgeInsetsMake(0,0,0,0)];

這時候你會發現你的tableview 的分割線是不是跟以前一樣了呢!



在iOS7中,UITableViewCell左側會有默認15像素的空白。這時候,設置setSeparatorInset:UIEdgeInsetsZero 能將空白去掉。

但是在ios8中,設置setSeparatorInset:UIEdgeInsetsZero 已經不起作用了。下面是解決辦法

首先在viewDidLoad方法加入以下代碼:

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

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

    [self.tableView setSeparatorInset:UIEdgeInsetsZero];

}

然後在UITableView的代理方法中加入以下代碼:

- (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];
    }

}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章