匹配自定义和标准UITableViewCelltypes的左alignment

我在故事板中定义了自定义的UITableViewCell 。 我也使用一些内置的标准样式单元格。 我需要设置约束条件,以便我的自定义单元格与平台定义的单元格相匹配 (在左侧将它们的标题正确alignment)。

我注意到,单元格的左alignment在iOS版本和运行的设备之间改变。 看起来像左alignment是默认的单元格separatorInset相同。

这里是几个设备和iOS版本的UITableViewCellseparatorInset

  • iPad在7 – 15点。
  • iPad的8 – 20点。
  • iPhone上7 – 15点。
  • iPhone 8 – 16点。

其他设备(iPhone 6+,iPad Mini)可能不同 – 我没有详尽检查。

你将如何确保自定义单元格和内置单元格具有相同的标签左alignment?

有没有一种明智的方法来获取这些插图的默认值,并在故事板中设置的自动布局约束中使用它们? 如何在代码?

我有同样的问题,但其他答案无法帮助我,因为我在UITableViewController中使用静态单元格。 经过几次试错之后,我终于find了解决iPhone 6+上的separatorInset问题的方法,没有一行代码。

在这里输入图像说明

我只需将UILabel的左边缘与左边距值为0 [内容视图(当前距离= 0)]alignment。 也改变UILabel的X位置得到0.(对于我的情况,在界面生成器中,边距是7,UILabel的X = 8)。 iPhone 4S,5S,6和6+的alignment效果很好。

编辑:XCode 7中更改。其他步骤:将相应单元格的TableViewCell和其contentView “保留Superview边距”设置为TRUE或检查IB – >大小检查器中。 请参阅@ tebs1200的答案。

希望这可以帮助。

您可以在故事板中纯粹实施Markbuild议的解决scheme:

  1. 确保select了自定义单元格。

    表视图单元格在视图树中选择

  2. 确保在“尺寸”检查器中选中“ 保留超视angular边距”

    在“尺寸”检查器中选择“保留超视图边距”

  3. 现在select单元格的内容视图

    在这里输入图像说明

  4. 确保在这里也select保留超视点边距 (请参阅步骤2中的图像)

  5. select您的自定义原型单元格中的标签(或其他视图)。
  6. 约束它的左边缘距边缘0像素。

    在这里输入图像说明

我的工作是将这两行添加到我的自定义UITableViewCell实现:

 self.preservesSuperviewLayoutMargins = YES; self.contentView.preservesSuperviewLayoutMargins = YES; // ... add test view to content view... 

然后我使用默认间距的自动布局:

 [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[testView]-|" options:0 metrics:nil views:@{@"testView":testLabel}]]; [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[testView]-|" options:0 metrics:nil views:@{@"testView":testLabel}]]; 

在iOS8中苹果引入了layoutMargins

您可以将其设置在故事板或代码中,就像这样:

 cell.layoutMargins = UIEdgeInsetsZero // change by your custom value 

在此之前,您必须将preservesSuperviewLayoutMarginsSuperviewLayoutMargins设置为NO,防止单元格inheritance表视图的边距设置

保存SuperViewLayoutMargins :一个布尔值,指示当前视图是否也尊重其超级视图的边距。

希望这可以帮到你 ;)