gpt4 book ai didi

swift - 在scrollView中显示图像不正确

转载 作者:行者123 更新时间:2023-11-30 10:10:14 24 4
gpt4 key购买 nike

我想在自定义 tableViewCell 中的 ScrollView 中显示图像。它确实显示了一些图像,但它们是错误的。我相信这是因为它们被重复使用,所以在不应该有图像的地方,它仍然会显示。

此外,我的图像变得更亮/更暗,因为当我向上或向下滚动时,它会再次创建,从而将更多的 ScrollView 分层或仅在图像之上分层。

//global
var masterImageArray = Array<Array<UIImage>>() //holds ALL of my images

//other info for my scrollview to use
let imageWidth: CGFloat = 100
let imageHeight: CGFloat = 200
let yPosition: CGFloat = 0
var xPosition: CGFloat = 0
var scrollViewContentSize: CGFloat = 0


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell: FriendsFeedTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! FriendsFeedTableViewCell

// holds array of UIImages to display in scrollView
let images = masterImageArray[indexPath.row]

//scrollView to display images ([UIImage])

for var i = 0; i < images.count; i++ { //images will vary

let myImage: UIImage = images[i]

let myImageView: UIImageView = UIImageView()

myImageView.image = myImage

myImageView.frame.size.width = imageWidth
myImageView.frame.size.height = imageHeight
myImageView.frame.origin.x = xPosition

cell.imageScrollView.addSubview(myImageView)

xPosition = imageWidth
scrollViewContentSize += imageWidth

cell.imageScrollView.contentSize = CGSize(width: scrollViewContentSize, height: imageHeight)
}
}

我的问题是,如何正确显示它们以及如何停止“重用”或在彼此之上创建其他内容。我应该将此代码放入 tableViewCell 文件中吗?

----编辑:1------

遵循@joern的建议后,我继续使用了3个UIImageView,它将显示图像,而不是创建和销毁每个UIImageView。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell: FriendsFeedTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! FriendsFeedTableViewCell

let images = masterImageArray[indexPath.row]

var imageViews = [UIImageView]()

imageViews.append(cell.imageView_1)
imageViews.append(cell.imageView_2)
imageViews.append(cell.imageView_3)

for var i = 0; i < images.count; i++ {
imageViews[i].image = images[i]
}
}

最佳答案

这里有两个主要问题:

  1. 您不增加xPosition

应该是:

xPosition = 0
for var i = 0; i < images.count; i++ { //images will vary
...
xPosition += imageWidth
....
}
  • 在重新使用单元格之前,您不会重置单元格中的图像。
  • 在重复使用单元格之前,您必须重置图像。您可以在自定义单元类中执行此操作。为了实现这一点,您应该将所有与图像相关的代码移动到您的单元格类中。将 imageView 保存在数组中以访问它们并在 prepareForReuse 中重置它们。为了简单起见,我假设在这个例子中一个单元格永远不会有超过 3 个图像:

    class CustomTableViewCell: UITableViewCell {

    let imageViews = [UIImageView]()
    ....

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    for _ in 0...2 {
    let imageView = UIImageView()
    // setup and position the image view in your scroll view
    imageViews.append(imageView)
    }
    }

    override func prepareForReuse() {
    for imageView in imageViews {
    imageView.image = nil
    }
    }

    func updateImages(images: [UIImage]) {
    var imageIndex = 0
    for image in images {
    imageViews[imageIndex].image = image
    }
    }
    }

    然后,在 cellForRowAtIndexPath 的 View Controller 中,对出队的单元调用 updateImagesprepareForReuse是系统自动调用的,你不用自己调用。

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell: FriendsFeedTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! FriendsFeedTableViewCell
    cell.updateImages(masterImageArray[indexPath.row])
    ...
    }

    关于swift - 在scrollView中显示图像不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33424240/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com