【问题标题】:Hidden view is visible in custom UITableViewCell on rotate隐藏视图在旋转时在自定义 UITableViewCell 中可见
【发布时间】:2020-08-26 13:36:35
【问题描述】:

我有一个 UITableView,它带有一个作为 NIB 实现的自定义 UITableViewCell。自定义单元格包括 UILabel 和 UIView(ala 新电子邮件/消息指示器)。在cellForRowAt 中,我将标签设置为一些文本并隐藏 UIView,但将其isHidden 属性设置为 false。结果是一个行列表,其中只有一行文本。但是,如果我将屏幕旋转到横向,然后再转回纵向,那么在横向中不可见但现在纵向显示的几行的 UIView 可见!如果这些行从视图中滚动并返回到视图中,则 UIView 将按预期隐藏。我可以在一个非常简单的示例中重新创建此问题,其中

UIViewController UITableViewleading=0, trailing=0, top=0, bottom=0

UITableViewCell UIStackView - 轴=水平,对齐=中心,分布=填充,前导=0,尾随=0,顶部=0,底部=0 UIL标签 UIView - 宽度=10,高度=10

对这种行为的原因有什么想法吗?我尝试在cellForRowAt 中设置cell.layoutIfNeeded(),但没有成功。

根据要求附上cellForRowAt 代码。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) as! TableViewCell

    cell.titleLabel.text = dataSource[indexPath.row]
    cell.indicatorView.isHidden = true

    return cell
}

【问题讨论】:

  • 可能由于单元格可重用性,请在此处附上您的 cellForRowAt 委托方法代码
  • @DharaPatel 应要求将代码包含在帖子中。
  • 只是为了测试,您能否检查一下在您的 cellForRowAt 方法中添加 cell.indicatorView.isHidden = false 并测试它的行为
  • @DharaPatel 你的意思是把它设置为true吗?如果cell.indicatorView.isHidden = true 行为与帖子相同。如果cell.indicatorView.isHidden = false 每一行的视图都按预期可见。
  • cell.indicatorView.isHidden = true 对于所有条件?

标签: ios swift uitableview


【解决方案1】:

它的可重用性问题 .... 在您的 TableViewCell 覆盖 ...prepareToReuse().. 并在那里设置默认值 ...

func prepareForReuse()

如果 UITableViewCell 对象是可重用的——也就是说,它具有重用性 标识符——这个方法在对象返回之前被调用 来自 UITableView 方法 dequeueReusableCell(withIdentifier:)。为了 性能原因,您应该只重置单元格的属性 与内容无关,例如 alpha、编辑和选择 状态。 tableView(_:cellForRowAt:) 中的表视图的委托 重用单元格时应始终重置所有内容。如果细胞 对象没有关联的重用标识符,此方法是 不叫。如果你重写这个方法,你必须确保调用 超类实现

Apple docs

在故事板中也隐藏指示器视图

【讨论】:

  • 你可以发送示例项目吗?调查一下?
  • 通过wetransfer发送
  • 是的,我可以。如何获取您的电子邮件地址?
  • 你不需要它......你可以不用电子邮件发送
猜你喜欢
  • 1970-01-01
  • 2017-05-14
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多