OGeek|极客世界-中国程序员成长平台

标题: ios - 自定义 UITableViewCell 中 subview 的 Swift 可变数量 [打印本页]

作者: 菜鸟教程小白    时间: 2022-10-22 09:02
标题: ios - 自定义 UITableViewCell 中 subview 的 Swift 可变数量

我有一个显示自定义单元格的 UITableView。每个单元格包含一个 ScrollView 、一个 ImageView 和几个文本标签。这一切都已在 Storyboard中设置。我在 cellForRowAtIndexPath 中设置了文本标签和 ImageView 的各种属性.到目前为止,直截了当。

现在,我需要向每个单元格中的 ScrollView 添加可变数量的图像。目前,我更新 ScrollView 的内容大小并调用 cell.contentView.addSubview将这些图像添加到 cellForRowAtIndexPath .不幸的是,这似乎会导致内存泄漏。

如果我在表格 View 上上下滚动多次,它会变得非常故障和缓慢。我怀疑我添加到单元格的 subview 没有被释放。每次调用 'cellForRowAtIndexPath' 时,我都会尝试删除单元格的所有 subview ,但这似乎不能解决问题。

我应该在哪里向单元格的 ScrollView 添加 subview ,以便在每次重用单元格时释放它们?

这是我的代码的一部分:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier("newsFeedCell", forIndexPath: indexPath) as! NewsFeedCell
    cell.layoutIfNeeded()

    // Get the profile picture dimensions
    self.profPicWidthHeight = getProfilePictureDimensions(cell)

    // Reset all views in the friends subview
    for view in cell.friends.subviews {
        view.removeFromSuperview()
    }

    // Get all info to display in cell
    cell.eventTitle.text = self.eventNames[indexPath.section]
    cell.time.text = self.eventTimes[indexPath.section]
    cell.entityPicture.image = self.eventImages[indexPath.section]
    cell.entityName.text = self.eventSponserNames[indexPath.section]

    // If this user has joined this event, add his/her image to the array
    if (self.eventsUserJoined[indexPath.section]) {
        self.eventUserImages[indexPath.section].append(self.meImage)
    }

    // Set the scroll view content size
    cell.friends.contentSize = CGSizeMake(CGFloat(self.eventUserImages[indexPath.section].count + 2) * (self.profPicHorizontalOffset + self.profPicWidthHeight), cell.friends.frame.height)

    // Add profile images
    var i: CGFloat = 1
    for profPic in self.eventUserImages[indexPath.section] {
        cell.friends.addSubview(layoutProfilePicture(i, picture: profPic!, squareDimension: self.profPicWidthHeight))
        i++
    }

非常感谢您能提供的任何帮助!



Best Answer-推荐答案


您需要使用图像缓存来克服缓慢。您的单元格每次出现在屏幕上时都会重新绘制。如果不对图像使用 inMemory 缓存,则会导致速度缓慢。看看 SDWebImage 并使用它来设置图像。

https://github.com/rs/SDWebImage

示例使用:

让 url = NSURL(string: "http://my-images-url.com ")

self.imageView.sd_setImageWithURL(url,已完成: block )

关于ios - 自定义 UITableViewCell 中 subview 的 Swift 可变数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31843277/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4