使用Autolayout模仿UITableViewCellStyleValue1 accessoryType-detailTextLabel间距?

时间:2015-03-06 08:01:21

标签: ios uitableview autolayout

当使用带UITableViewCellStyleValue1的默认UITableViewCell时,detailTextLabel知道accessoryType。标签和单元边缘之间的距离不同于标签和accessoryType视图之间的距离。当我使用自定义UITableViewCell子类时,两个距离是相等的。哪个看起来不如默认实现。

这有点难以解释,所以这是一个截图:

enter image description here

前两个单元格是UITableViewCellStyleValue1的默认UITableViewCell。
单元格3和单元格4是使用H:[label]-16-|约束设置的自定义单元格 单元格5和单元格6是使用Trailing-0-TrailingMargin约束设置的自定义单元格。

我想获取自己单元格的默认单元格的行为。如何通过自动布局实现这一目标?

1 个答案:

答案 0 :(得分:3)

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()
    }
}