参考:
1、http://blog.csdn.net/yesjava/article/details/41039961
2、http://www.2cto.com/kf/201411/349631.html
在iOS8中,设置Cell底部横线顶到最左边,用原来的方法:setSeparatorInset:UIEdgeInsetsZero 不起作用。
原因:iOS8 在cell和tableview中都引入了layoutMargins属性,而且这个属性在iOS 7中并没有,所以你需要区别对待这两个版本。
解决方法如下:
1、设置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];
}
}
2、你还需要在tableview中设置同样的属性. 通过多次试验,可以在viewDidLayoutSubviews.中设置这个属性(在viewDidLoad方法中设置应该也可以)
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
}
}
Edit: 按照 @bffmike 在 Twitter 上所说, 你可能还需要在cell中设置 preservesSuperviewLayoutMargins=NO . 再次说明:每个人的情况因人而异.
如果你按照上面的做法无法设置,你需要在第1步中添加如下代码:
if([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]){
[cell setPreservesSuperviewLayoutMargins:NO];
}