ios8 UITableView设置 setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法

70 篇文章 0 订阅

ios7的时候在storyboard 设置 TableView的separator intend = 0 可以让tableview的分割条顶到头。

但是,升级了iOS8时,发现不起作用了。

经过google,在 stackoverflow 发现了答案

翻译纪录一下

iOS8 在cell和tableview中都引入了layoutMargins属性,而且这个属性在iOS 7中并没有,所以你需要区别对待这两个版本。

使用 Ricky 的方案设置cell中的layoutMargin属性:

?
1
2
3
4
5
6
7
8
9
-( 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];
     }
?
1
2
   //按照作者最后的意思还要加上下面这一段 </p><p>    if([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]){</p><p>        [cell setPreservesSuperviewLayoutMargins:NO];</p><p>    }</p>
}

你还需要在tableview中设置同样的属性. 通过多次试验,我发现你可以在viewDidLayoutSubviews.中设置这个属性

把下面代码拷贝到你的view的实现中

?
1
2
3
4
5
6
7
8
9
10
11
12
-( 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 . 再次说明:每个人的情况因人而异.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值