ios - 自定义 UITableViewCell 未正确加载

标签 ios swift uiview tableview uitableview

我有一个自定义 UITableViewCell,它有两个 subview ,一个标签和一个 UIView。 UIView 旨在成为将在运行时加载的自定义 View 的容器,并且在 IB 中设置了红色背景。

自定义单元格具有用于设置单元格的 setupWithData(data: Data) 方法。该方法是从 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 调用的,并使用来自 tableView 数据源的数据。

但是,当加载 tableView 时,只能看到前几个单元格的红色背景(没有自定义 View )。当我向下滚动时,自定义 View 开始出现。奇怪的是,所有单元格的标签都有正确的文本。

我使用界面调试器进行了调查,发现自定义 View 确实添加到了容器 View 中,但其所有约束(宽度、高度、midX、midY)都设置为 0。此外,我还查看了加载的我向下滚动后的单元格(实际上已经正确加载了我的自定义 View 的单元格)并意识到有时容器 View 有时会有我的自定义 View 的两个具有不同数据的 subview 。

如果您对此有任何帮助,我将不胜感激。

注意:我正在使用 Swift 3。

更新

这是我的设置代码:

func setupWithParticle(_ particle: ParticleProtocol, isFavourite: Bool = false) {
    self.particleLabel.text = particle.name(withColor: false)

    let particleView = ParticleView(position: CGPoint.zero, width: self.particleViewContainer.width, particle: particle)
    particleView.respondsToTouch = false
    particleView.setBorders([.Top, .Left, .Right, .Bottom], width: 1, color: .black())

    if isFavourite {
        particleView.backgroundColor = #colorLiteral(red: 0.9559464455, green: 0.7389599085, blue: 0.2778314948, alpha: 1)
    }

    self.particleViewContainer.subviews.forEach {
        $0.removeFromSuperview()
    }

    self.particleViewContainer.addSubview(particleView)
}

最佳答案

不要在 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 中调用 addSubview:

请记住,单元格是可重复使用的。 articleView 将一遍又一遍地添加到您的单元格中。

因此,在addSubview:之前,请尝试从articleViewContainer中删除 subview

更新

在使用 self.parentViewContainer.width 之前尝试调用 self.parentViewContainer.layoutIfNeeded()

关于ios - 自定义 UITableViewCell 未正确加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38542100/

相关文章:

ios - 错误 - 预期返回 'UIInterfaceOrientationMask' 的函数中缺少返回值

ios - Swift 尝试以模态方式呈现事件 Controller [当前 View Controller ],即使呈现的 Controller 是另一个 Controller

ios - 为什么在尝试垂直对齐我的 UILabel 时 sizeToFit 不起作用?它只是停留在中心

ios - UIView 不接受 UIViewControllers 数据

ios - 多个按钮,每个按钮连接到多个 ViewController

ios - 在 UIView 中触摸后发出警报

ios - 如何让 NSURLSession 以一定的间隔重复?

ios - UICollectionView 的框架未正确更新为 UITableViewCell subview

objective-c - iOS 中的画圈触摸移动了

ios - 如何使用 AVPlayer 获取 HLS 流的当前时间?