如何在UITableViewCell中隐藏UITableViewCellReorderControl的空间?

时间:2015-09-17 12:40:53

标签: swift uitableview ios9

这就是我要在显示单元格时所做的事情:

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

    if let reorderControl = cell.huntedSubviewWithClassName("UITableViewCellReorderControl") {

        let resizedReorderControl = UIView(frame: CGRectMake(0, 0, CGRectGetMaxX(reorderControl.frame), CGRectGetMaxY(reorderControl.frame)))

        resizedReorderControl.addSubview(reorderControl)
        cell.addSubview(resizedReorderControl)

        let sizeDifference = CGSizeMake(resizedReorderControl.frame.size.width - reorderControl.frame.size.width, resizedReorderControl.frame.size.height - reorderControl.frame.size.height)
        let transformRatio = CGSizeMake(resizedReorderControl.frame.size.width / reorderControl.frame.size.width, resizedReorderControl.frame.size.height / reorderControl.frame.size.height)

        var transform = CGAffineTransformIdentity

        transform = CGAffineTransformScale(transform, transformRatio.width, transformRatio.height)
        transform = CGAffineTransformTranslate(transform, -sizeDifference.width / 2, -sizeDifference.height / 2)

        resizedReorderControl.transform = transform
    }
}

简单获取重新排序视图并对其进行转换,以使其能够对整个单元格上的单元格点击进行重新排序。但是在将重新排序控制移动到不同的子视图之后留下了空间。

刚刚显示的单元格:

enter image description here

移动时的细胞:

enter image description here

单元格应该如下所示(能够重新排序,没有空间进行重新排序控制):

enter image description here

我的意思是什么?

我的想法是通过点击其上的任何位置来重新排序UITableViewCell不仅通过点击右侧的三行)。然后我得到这些UIView并将其传播到整个单元格。但是出现了一些问题。三线空间留空。如何删除该空间?

1 个答案:

答案 0 :(得分:1)

我不建议访问私有类(UITableViewCellReorderControl),因为Apple不鼓励它。最重要的是,他们有权在需要时围绕此属性进行任何修改。 但是如果在添加上面已经发布的代码之后仍然需要删除右侧的空白区域,只需将此代码添加到UITableViewCell子类中:

override func layoutSubviews() {
    super.layoutSubviews()
    contentView.frame.size.width = frame.size.width
}

顺便说一句,这只是一种解决方法。