自定义UITableView分隔符插件无法在带有故事板的iOS 8上运行。

时间:2014-09-22 13:13:08

标签: ios objective-c uitableview ios8

我的应用的所有tableViews都不尊重property上的SeparatorInset Custom - left = 0 - storyBoard。在iOS 7上一切正常,但现在不行了。

当我实现以下两种方法时:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    // iOS 7 
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }
    // iOS 8 
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}

-(void)viewDidLayoutSubviews
{
    // iOS 7 
    if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [self.tableView setSeparatorInset:UIEdgeInsetsZero];
    }
    // iOS 8 
    if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
        [self.tableView setLayoutMargins:UIEdgeInsetsZero];
    }
}

它工作正常,我只是不明白为什么我不能在storyboard上设置这个更简单。

有什么想法?

3 个答案:

答案 0 :(得分:5)

此代码可能对您有所帮助。 包括layoutMargins和separatorInset,以支持iOS版本7,8 对于iOS8:

首先按如下方式配置表视图:

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

然后在您的cellForRowAtIndexPath:方法中,按如下方式配置单元格:

if ([cell respondsToSelector:@selector(layoutMargins)]) {
    cell.layoutMargins = UIEdgeInsetsZero;
}

对于版本检查,您可以使用以下内容:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
  if ([self respondsToSelector:@selector(setLayoutMargins:)]) {
    cell.layoutMargins = UIEdgeInsetsZero;
  }
#endif

答案 1 :(得分:1)

    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    // Remove separator inset
    if cell.respondsToSelector("setSeparatorInset:") {
        cell.separatorInset = UIEdgeInsetsZero
    }

    // Prevent the cell from inheriting the Table View's margin settings
    if cell.respondsToSelector("setPreservesSuperviewLayoutMargins:") {
        if #available(iOS 8.0, *) {
            cell.preservesSuperviewLayoutMargins = false
        }
    }

    // Explictly set your cell's layout margins
    if cell.respondsToSelector("setLayoutMargins:") {
        if #available(iOS 8.0, *) {
            cell.layoutMargins = UIEdgeInsetsZero
        }
    }
}

答案 2 :(得分:0)

易:

cell.separatorInset = UIEdgeInsetsMake(0.0,CGRectGetWidth(tableView.frame)/ 2,0.0,CGRectGetWidth(tableView.frame)/ 2);