【问题标题】:How to hide space of UITableViewCellReorderControl in UITableViewCell?如何在 UITableViewCell 中隐藏 UITableViewCellReorderControl 的空间?
【发布时间】:2015-09-17 12:40:52
【问题描述】:

这是显示单元格时我所做的:

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

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

刚刚显示的单元格:

移动中的单元格:

单元格应如下所示(能够在没有空间的情况下重新排序以进行重新排序控制):

这是什么意思?

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

【问题讨论】:

  • 无法理解您要查找的内容。但我认为你在谈论tableView:shouldIndentWhileEditingRowAtIndexPath:
  • 我更新了问题。请看一下。
  • AFAIK UITableViewCellReorderControl 不是公共类,您的应用可能会因此被拒绝。我建议添加一个长按手势识别器,拍摄单元格快照,添加一个模拟单元格的子视图,并在移动该视图时根据需要修改数据源。实现起来并不容易,但您几乎可以完全控制它的外观。
  • 真的吗?是禁止的吗?因此,我如何通过点击整个单元格来重新排序单元格,而不显示重新排序控制。是否可以?您可以发布您的回复作为答案。谢谢。

标签: swift uitableview ios9


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-05-13
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    相关资源
    最近更新 更多