ios - 取消选择时如何阻止 UITableViewCell 闪烁为白色?

标签 ios swift uitableview

i具有 uitaiteView 的常见模式,其中辅助 View Controller 在选择一行时被推到顶部。为了在用户关闭第二个 View Controller 并返回到 TableView 时为用户提供一些上下文,第一个 View Controller 具有以下内容:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if let index = tableView.indexPathForSelectedRow {
        tableView.deselectRow(at: index, animated: animated)
    }
}

这会导致这种意外且不和谐的过渡,在这种过渡中,取消选择的单元格会逐渐淡出它的背景,然后再恢复正常:

jarring animation

我的预期是它会从部分柔和的状态选择直接回到正常的黑暗状态。

(该单元是一个正在进行的工作 - 它远未完成)

按照建议here这不是一个真正的选择,因为我确实想保留上下文提示,并且整个单元格应该继续具有白色背景。

在回答 Rico 的问题时,单元格被创建为 .swift.xib 对, View 的层次结构为:

Interface Builder view hierarchy

Swift 做的很少——在两个标签上设置 .textInsets,在按钮中绘制披露指示符。

最佳答案

我相信这是因为 setSelected 的默认实现删除了单元格所有 subview 的背景色。您可以做的是覆盖 setSelected 和/或 setHighlighted 并自行更新单元格。

这还允许您为选定的单元格创建自定义外观。

选中时使用红色背景,未选中时使用白色背景的示例:

override func setSelected(_ selected: Bool, animated: Bool) {
    let animationDuration = animated ? 0.3 : 0
    UIView.animate(withDuration: animationDuration) {
      self.backgroundColor = highlighted ? UIColor.red : UIColor.white
    }
  }

关于ios - 取消选择时如何阻止 UITableViewCell 闪烁为白色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56381578/

相关文章:

swift - 你如何在 Swift 3 中编写完成处理程序?

swift - 如何使用自定义单元格隐藏 tableView 中的标签?

iphone - NSUserDefaults 中的 NSMutableArray

android - Flutter 在主题中改变页面过渡速度/持续时间

ios - 在 iOS 中获取 Facebook 好友列表

ios - 我可以在 iOS 中使用 system() 吗?

ios - alamofire-将 json 字符串作为参数传递

swift - 如何在 Podfile 中为每个 Pod 设置 Legacy Swift 版本

iOS : Sliding tab layout with UITableview in swift

ios - 这怎么可能? UITableView 数据源计数奇怪的行为