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