UITableViewCell 中的 UILabel 约束横向变化

Posted

技术标签:

【中文标题】UITableViewCell 中的 UILabel 约束横向变化【英文标题】:UILabel constraints in UITableViewCell change in landscape 【发布时间】:2016-03-04 04:17:48 【问题描述】:

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

这种策略在 table view 是纵向时效果很好,但在横向时看起来约束会缩小,如下所示:

纵向:

风景:

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

我尝试将标签限制在 contentView 上,边距打开和关闭,结果是一样的。当自定义标签的约束与 contentView 左侧的距离明显相同时,它们甚至会报告不同的常量值。

有人知道怎么回事吗?

【问题讨论】:

在您的第一张图片中,您的常量值为 7,您能解释一下吗? 当然。边距设置为 8,因此通过使用恒定值 7 约束边距,我得到了所需的 15 点偏移。 似乎,当您将设备旋转到横向模式时,默认单元格标签的左侧填充增加。可能就像设备处于纵向模式时,textLable 的左填充为 15pts,而在横向模式下为 20pts。您可以创建标签前导空间约束的出口并在 viewWillRotate: 方法中更新其值。另请参阅 Vignesh 的答案。 你说得对,插图正在改变。 【参考方案1】:

尝试为标签的前导约束创建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 尺寸类设置不同的约束:

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

【讨论】:

这是正确的想法(除了awakeFromNib 选项,因为仅在第一次从情节提要加载单元格时调用)。我将编辑您的答案以包括我用来解决它的方法,并接受它。 酷。感谢您提供另一种方法。

以上是关于UITableViewCell 中的 UILabel 约束横向变化的主要内容,如果未能解决你的问题,请参考以下文章

更改 UITableViewCell 中的对象也更改了重用 UITableViewCell 的对象

确定 UITableViewCell 中的 UIButton

UITableViewCell 事件中的 UIButton 不起作用

UITableViewCell 中的 UICollectionView

UITableVIewCell 中的 UIScrollView 不会滚动

UITableViewCell 中的 UITextField - UIButton