【问题标题】:TableView Cells Overlapping UIView After Scrolling Down and Up向下和向上滚动后重叠 UIView 的 TableView 单元格
【发布时间】:2017-01-08 07:59:03
【问题描述】:

我在玩弄一些设计概念,却被这个“错误”困住了。

知道为什么会这样吗?我已经迭代了不同的东西,但仍然找不到罪魁祸首或解决方案。

这个价格的“圆圈”与底部的另一个单元格重叠是我的预期设计。这一切都很好,但是,当我向下和向上滚动时,“旧”单元格突然与“圆圈”重叠。

请看截图。非常感谢任何帮助!!!

以前有人经历过吗?

iOS9 - Xcode 7.3.1

编辑:

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if let cell = tableView.dequeueReusableCellWithIdentifier("CategoryCell") as? CategoryCell {

        cell.selectionStyle = .None
        cell.configureCell(dishes[indexPath.row])

        return cell

    } else {
        return UITableViewCell()
    }

}

编辑 2: 经过进一步的分析,我很确信这与身高无关?我使用了不同的高度,但仍然得到相同的结果。

问题是,它可以完美加载,即使向下滚动,一切都很好。直到我向上滚动,这就是问题开始出现的地方。

将 Clip SubViews (Cell) 设置为 true 会在加载时剪辑所有内容,因此我将其设置为 false。

剩下的问题是,向上滚动时如何处理剪切?

编辑 3: 我想我现在明白了这个问题,但是我仍然不太确定如何解决它。

CircleView 放置在一个单元格上,该单元格与它下面的另一个单元格重叠。设置 clipsToBounds、height 或将其放在前面不会对其下方的单元格产生影响,因为它会在向上滚动时远离显示。

任何人都知道如何以某种方式重绘它,就像它刚刚加载一样(因为 onload,一切正常)?或者我在其他地方是否有一个 clipsToBounds 设置?

我认为解决方案与此有关:How to stop UITableView from clipping UITableViewCell contents in iOS 7

但是,此解决方案不适用于 ios9。

【问题讨论】:

  • 圆圈是标题还是一切都是单元格?也许您正在 cellForRowAtIndexPath 上添加子视图(UIImageView)。请出示您的代码。
  • 您能否发布您对 cellForRowAtIndexPath 方法的实现?
  • @3li 按要求添加了代码。这是相当标准的。
  • @KlevisonMatias 一切都是细胞。圆圈是放置在单元格底部的 UIView。我已经编辑了我的帖子以显示代码。
  • @phage04 请告诉我提供的解决方案是否有效?

标签: ios swift uitableview ios9 xcode7


【解决方案1】:

在cellForRowAtIndexPath:方法中设置单元格层anchorPointZ为行索引

cell.layer.anchorPointZ = indexPath.row;

【讨论】:

  • 天哪,你是个巫师!
  • 稍微修改了一下:cell.layer.anchorPointZ = CGFloat(indexPath.row)
  • 非常感谢! +10 为你 :)
  • 请您解释一下这行代码背后的意义是什么? @phage04
【解决方案2】:

问题与单元格的高度有关。它不会为您动态调整。

您可以尝试将剪辑设置为 tableView 上的边界(查看屏幕截图)

clipsToBounds option

【讨论】:

  • 试过玩这个,唯一能产生影响的是这个的单元级设置。此时,我刚刚将所有内容(tableview、cell、contentview)设置为未标记。如果我将 clipstobounds 的单元格设置设置为 true,那么所有内容都将在加载时被剪辑。将其设置为 false 将使事情在加载时完美运行,但是作为滚动(重用),这就是问题开始出现的地方。
【解决方案3】:

您是否尝试过为 tableView 设置估计行高度?此外,您可以使用函数 heightForRowAtIndexPath 并返回 UITableViewAutomaticDimension。这应该会自动标注每一行以填充圆圈大小。

编辑:如果你想把圆圈放在其他所有东西的前面,试试这个:

YourLabel.layer.zPosition = 1;
self.view.bringSubviewToFront(YourLabel);

【讨论】:

  • 按照建议尝试过,但它只给了我更大的高度。底部的圆圈不会在加载时被剪裁,仅在重用期间。
  • 我刚刚检查了你的截图。您可以尝试将圆圈置于其他所有内容的顶部。我将编辑我的答案。
  • 感谢您的评论,它让我更好地理解了这个问题。您是否知道如何重绘它,以便在向上滚动时它从屏幕上移除时仍会与其下方的单元格重叠?请参阅编辑 3。谢谢!感谢您的帮助!
猜你喜欢
  • 2020-02-14
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多