在iOS 8 UITableView for XCode 6 iPhone模拟器上如何移除SeparatorInset?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

我在XCode 6 GM 上找到了UITableView适用于iPhone 6模拟器(iOS 8)的奇怪空白区域。我试图SeparatorInset从故事板和代码都设置,但白色空间直到那里。

以下代码适用于iOS 7,但不适用于iOS 8(iPhone 6模拟器)。

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

我附上了下面的截图:

顺便说一句,我正在使用AutoLayout。希望有人能告诉我一种方法来消除空白TableView

提问于
用户回答回答于

Try this self.myTableView.layoutMargins = UIEdgeInsetsZero ;” 这行代码仅适用于iOS 8,因为layoutMargins仅适用于iOS 8.如果我在iOS 7上运行相同的代码,它将崩溃。

@property(nonatomic) UIEdgeInsets layoutMargins Description The default spacing to use when laying out content in the view. Availability iOS (8.0 and later) Declared In UIView.h Reference UIView Class Reference

正确的答案tableview layoutMargins,并cell layoutMarginsUIEdgeInsetsZero(如果它存在于iOS 8)。它也不会在iOS 7上崩溃。

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{

    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [tableView setSeparatorInset:UIEdgeInsetsZero];
    }

    if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
        [tableView setLayoutMargins:UIEdgeInsetsZero];
    }

   if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
   }
}

看到下面的屏幕截图: -

用户回答回答于

尝试创建一个UITableViewCell类别类别并添加此getter

- (UIEdgeInsets)layoutMargins {
    return UIEdgeInsetsZero;
}

在iOS7中,这不会被称为cos,在SDK中没有此属性,并且不会导致任何崩溃;在iOS8中,每次使用单元时都会调用它

扫码关注云+社区

领取腾讯云代金券