原文出自: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];
}
}