UITableViewCell在UITableViewCell中的UILabel约束条件变化

问题描述:

我的故事板中有一个静态的UITableView,它具有系统单元和自定义单元的组合。为了使自定义单元格看起来像系统单元格,我从UILabel的前面向单元格的contentView添加了一个15点约束(以匹配15个点的默认分隔符插入点)。UITableViewCell在UITableViewCell中的UILabel约束条件变化

这种策略效果很好,当表视图是纵向的,但它看起来像限制,如下图所示,在景观时收缩:

肖像: System cell alongside custom cell in portrait

景观: System cell alongside custom cell in landscape

您可以在上图中看到“BUG REPORTING”部分标题,“Report a Bug”标签(由系统单元定位),并且两个单元格之间的连线距离contentView的左侧均为15点,但“L ogging“标签更接近。

我试着用margin和on关闭contentView的标签,结果是一样的。当自定义标签的约束与contentView左侧的距离明显相同时,甚至会报告不同的常量值。

Example of constraint information when constrained to margin

Example of constraint information when not constrained to margin

有谁知道这是怎么回事?

+0

在您的第一张图片中,您的值为7,请问您能解释一下吗? –

+0

当然。余量设置为8,所以通过将余量限制为7,我可以得到所需的15点偏移量。 – Mark

+0

看来,当您将设备旋转到横向模式时,默认单元格标签的左侧填充增加。这可能是当设备处于portraint模式时,textLable的左侧填充为15pts,横向模式下为20pts。您可以创建标签领先空间约束的出口,并在viewWillRotate:method中更新其值。另请参阅Vignesh答案。 –

尝试为标签的主要约束的IBOutlet,并修改它显示之前的细胞:

func tableView(_ tableView: UITableView, willDisplayCell cell: UITableViewCell, 
    forRowAtIndexPath indexPath: NSIndexPath) { 
     let leftInset = cell.separatorInset.left 
     cell.labelLeadingConstraint.constant = leftInset - 8 
     // - 8.0 accounts for constraint to margins in autolayout 
} 

或者,你可以使用大小类设定不同的约束条件为紧凑型身高尺寸级别:

Compact height size class

然后,只需设置的约束常量至12,而不是如图7(或20而不是15,如果不使用边距)。

+0

这是正确的想法(除了'awakeFromNib'选项外,因为只有当单元格从Storyboard第一次被加载时才被调用)。我会编辑你的答案,还包括我用来解决它的方法,并接受它。 – Mark

+0

很酷。谢谢你的另一种方式。 – UIResponder