【问题标题】:UILabel constraints in UITableViewCell change in landscapeUITableViewCell 中的 UILabel 约束横向变化
【发布时间】: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 的答案。
  • 你说得对,插图正在改变。

标签: ios autolayout uitableview


【解决方案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 选项,因为仅在第一次从情节提要加载单元格时调用)。我将编辑您的答案以包括我用来解决它的方法,并接受它。
  • 酷。感谢您提供另一种方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多