使用自动布局模仿 UITableViewCellStyleValue1 accessoryType-detailTextLabel 间距?
Mimic UITableViewCellStyleValue1 accessoryType-detailTextLabel spacing with Autolayout?
当使用带有 UITableViewCellStyleValue1 的默认 UITableViewCell 时,detailTextLabel 知道 accessoryType。标签和单元格边缘之间的距离不同于标签和 accessoryType 视图之间的距离。当我使用自定义 UITableViewCell 子类时,两个距离相等。这看起来不如默认实现好。
解释起来有点费劲,截图如下:
前两个单元格是带有 UITableViewCellStyleValue1 的默认 UITableViewCell。
单元格 3 和 4 是使用 H:[label]-16-|
约束设置的自定义单元格。
单元格 5 和 6 是使用 Trailing-0-TrailingMargin
约束设置的自定义单元格。
我想为我自己的单元格获取默认单元格的行为。我如何通过自动布局实现这一目标?
iOS实际上移动了contentView
,所以解决方案是简单地调整contentView和标签之间的距离:
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
/* ... */
trailingDetailConstraint = NSLayoutConstraint(item: contentView, attribute: .Right, relatedBy: .Equal, toItem: rightLabel, attribute: .Right, multiplier: 1, constant: 15)
contentView.addConstraint(trailingDetailConstraint)
}
override var accessoryType: UITableViewCellAccessoryType {
didSet {
if accessoryType == .None {
trailingDetailConstraint.constant = 15
}
else {
trailingDetailConstraint.constant = 0
}
layoutIfNeeded()
}
}
override var editingAccessoryType: UITableViewCellAccessoryType {
didSet {
if accessoryType == .None {
trailingDetailConstraint.constant = 15
}
else {
trailingDetailConstraint.constant = 0
}
layoutIfNeeded()
}
}
当使用带有 UITableViewCellStyleValue1 的默认 UITableViewCell 时,detailTextLabel 知道 accessoryType。标签和单元格边缘之间的距离不同于标签和 accessoryType 视图之间的距离。当我使用自定义 UITableViewCell 子类时,两个距离相等。这看起来不如默认实现好。
解释起来有点费劲,截图如下:
前两个单元格是带有 UITableViewCellStyleValue1 的默认 UITableViewCell。
单元格 3 和 4 是使用 H:[label]-16-|
约束设置的自定义单元格。
单元格 5 和 6 是使用 Trailing-0-TrailingMargin
约束设置的自定义单元格。
我想为我自己的单元格获取默认单元格的行为。我如何通过自动布局实现这一目标?
iOS实际上移动了contentView
,所以解决方案是简单地调整contentView和标签之间的距离:
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
/* ... */
trailingDetailConstraint = NSLayoutConstraint(item: contentView, attribute: .Right, relatedBy: .Equal, toItem: rightLabel, attribute: .Right, multiplier: 1, constant: 15)
contentView.addConstraint(trailingDetailConstraint)
}
override var accessoryType: UITableViewCellAccessoryType {
didSet {
if accessoryType == .None {
trailingDetailConstraint.constant = 15
}
else {
trailingDetailConstraint.constant = 0
}
layoutIfNeeded()
}
}
override var editingAccessoryType: UITableViewCellAccessoryType {
didSet {
if accessoryType == .None {
trailingDetailConstraint.constant = 15
}
else {
trailingDetailConstraint.constant = 0
}
layoutIfNeeded()
}
}