匹配自定义和标准UITableViewCelltypes的左alignment
我在故事板中定义了自定义的UITableViewCell
。 我也使用一些内置的标准样式单元格。 我需要设置约束条件,以便我的自定义单元格与平台定义的单元格相匹配 (在左侧将它们的标题正确alignment)。
我注意到,单元格的左alignment在iOS版本和运行的设备之间改变。 看起来像左alignment是默认的单元格separatorInset
相同。
这里是几个设备和iOS版本的UITableViewCell
的separatorInset
:
- 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:
-
确保select了自定义单元格。
-
确保在“尺寸”检查器中选中“ 保留超视angular边距”
-
现在select单元格的内容视图
-
确保在这里也select保留超视点边距 (请参阅步骤2中的图像)
- select您的自定义原型单元格中的标签(或其他视图)。
-
约束它的左边缘距边缘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
在此之前,您必须将preservesSuperviewLayoutMargins
的SuperviewLayoutMargins设置为NO,以防止单元格inheritance表视图的边距设置
保存SuperViewLayoutMargins :一个布尔值,指示当前视图是否也尊重其超级视图的边距。
希望这可以帮到你 ;)