tableview 间隔线 separator 与左边界间距调整

swift:

调整与左边间隔 = 10 

  1. viewdidload 中

        self.view.addSubview(priceTable)//添加table

        self.onSetMarginOrInset(true, fSetOffset: 10, cell: nil)  //先调用一次

        priceTable.registerClass(ScreenStyleCell.self, forCellReuseIdentifier: ScreenStyleViewCtrl.ScreenStyleCellID)//注册cell



2.

  func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)

    {

        self.onSetMarginOrInset(true, fSetOffset: 10, cell: cell as? ScreenStyleCell)

    }

    

    func onSetMarginOrInset(bSetTable:Bool,fSetOffset:CGFloat,cell:ScreenStyleCell?){

        if #available(iOS 8.0, *) {

            priceTable.layoutMargins = UIEdgeInsetsZero

            cell?.preservesSuperviewLayoutMargins = false

            cell?.layoutMargins = UIEdgeInsetsMake(0, fSetOffset, 0, 0)

        }

        priceTable.separatorInset = UIEdgeInsetsZero

        cell?.separatorInset = UIEdgeInsetsMake(0, fSetOffset, 0, 0)

    }




下面是转载至网络

OC:

在ios7中,UITableViewCell左侧会有默认15像素的空白。这时候,设置setSeparatorInset:UIEdgeInsetsZero 能将空白去掉。

但是在ios8中,设置setSeparatorInset:UIEdgeInsetsZero 已经不起作用了。下面是解决办法

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

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

[self.tableView setSeparatorInset:UIEdgeInsetsZero];

}

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

[self.tableView setLayoutMargins: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];

}

}

这样,空白就没有了



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

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

经过google,在 stackoverflow 发现了答案

翻译纪录一下

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

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

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

    }</code>


<code></code><p>   //按照作者最后的意思还要加上下面这一段 </p><p>    if([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]){</p><p>        [cell setPreservesSuperviewLayoutMargins:NO];</p><p>    }</p>

}


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

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

<code>-(void)viewDidLayoutSubviews

{

    [super viewDidLayoutSubviews];

 

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

        [self.tableView setSeparatorInset:UIEdgeInsetsZero];

    }

 

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

        [self.tableView setLayoutMargins:UIEdgeInsetsZero];

    }

} </code>


这样,在ios7,ios8中都可以实现分割条顶头的需求了。(译者:ios6缺省是顶头的,因此这个方案可以适用于ios6-8).

Edit: 按照 @bffmike 在 Twitter 上所说, 你可能还需要在cell中设置 preservesSuperviewLayoutMargins=NO . 再次说明:每个人的情况因人而异.


你可能感兴趣的:(tableview,separator,与左边界间距调整,间隔线,separatorInset)