Ios 图片和标签在滚动时不断加载
Ios images and labels keep loading while scrolling
我正在编写一个演示来显示用户的推文。
问题是:
每次我滚动到底部然后再滚动回来时,推文的图片和评论都会重新加载,甚至样式也变得一团糟。我知道它与 dequeue 有关,每次出队后我都将图像(这是 UIImageView 的数组)设置为 [],但它不起作用。我很困惑,无法入睡....
这是我的 TableCell(属性 和图像集)的核心代码,提供布局:
class WechatMomentListCell: UITableViewCell{
static let identifier = "WechatMomentListCell"
var content = UILabel()
var senderAvatar = UIImageView()
var senderNick = UILabel()
var images = [UIImageView()]
var comments = [UILabel()]
override func layoutSubviews() {
//there is part of Image set and comments
if images.count != 0 {
switch images.count{
case 1:
contentView.addSubview(images[0])
images[0].snp.makeConstraints{ (make) in
make.leading.equalTo(senderNick.snp.leading)
make.top.equalTo(content.snp.bottom)
make.width.equalTo(180)
make.height.equalTo(180)
}
default:
for index in 0...images.count-1 {
contentView.addSubview(images[index])
images[index].snp.makeConstraints{ (make) in
make.leading.equalTo(senderNick.snp.leading).inset(((index-1)%3)*109)
make.top.equalTo(content.snp.bottom).offset(((index-1)/3)*109)
make.width.equalTo(90)
make.height.equalTo(90)
}
}
}
}
if comments.count != 0, comments.count != 1 {
for index in 1...comments.count-1 {
comments[index].backgroundColor = UIColor.gray
contentView.addSubview(comments[index])
comments[index].snp.makeConstraints{(make) in
make.leading.equalTo(senderNick)
make.bottom.equalToSuperview().inset(index*20)
make.width.equalTo(318)
make.height.equalTo(20)
}
}
}
}
这是我的ViewController,提供数据源:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let tweetCell = tableView.dequeueReusableCell(withIdentifier: WechatMomentListCell.identifier, for: indexPath) as? WechatMomentListCell else {
fatalError("there is no WechatMomentList")
}
let tweet = viewModel.tweetList?[indexPath.row]
for i in tweet?.images ?? [] {
let flagImage = UIImageView()
flagImage.sd_setImage(with: URL(string: i.url))
tweetCell.images.append(flagImage)
}
for i in tweet?.comments ?? [] {
let flagComment = UILabel()
flagComment.text = "\(i.sender.nick) : \(i.content)"
tweetCell.comments.append(flagComment)
}
return tweetCell
}
图像 GET 请求已使用 Alamofire 在 ViewModel 中定义。
第一次是正确的。但是,如果我滚动屏幕,评论将再次加载并且图像会像这样乱七八糟。
我在您的表格视图单元格中发现了问题。在单元格中,您有两个这样的变量。
var images = [UIImageView()]
var comments = [UILabel()]
每次您使用此单元格时,图像和评论都会被附加。确保每次使用此单元格时都重置这些数组。比如在初始化时将主题设置为空。
我正在编写一个演示来显示用户的推文。
问题是: 每次我滚动到底部然后再滚动回来时,推文的图片和评论都会重新加载,甚至样式也变得一团糟。我知道它与 dequeue 有关,每次出队后我都将图像(这是 UIImageView 的数组)设置为 [],但它不起作用。我很困惑,无法入睡....
这是我的 TableCell(属性 和图像集)的核心代码,提供布局:
class WechatMomentListCell: UITableViewCell{
static let identifier = "WechatMomentListCell"
var content = UILabel()
var senderAvatar = UIImageView()
var senderNick = UILabel()
var images = [UIImageView()]
var comments = [UILabel()]
override func layoutSubviews() {
//there is part of Image set and comments
if images.count != 0 {
switch images.count{
case 1:
contentView.addSubview(images[0])
images[0].snp.makeConstraints{ (make) in
make.leading.equalTo(senderNick.snp.leading)
make.top.equalTo(content.snp.bottom)
make.width.equalTo(180)
make.height.equalTo(180)
}
default:
for index in 0...images.count-1 {
contentView.addSubview(images[index])
images[index].snp.makeConstraints{ (make) in
make.leading.equalTo(senderNick.snp.leading).inset(((index-1)%3)*109)
make.top.equalTo(content.snp.bottom).offset(((index-1)/3)*109)
make.width.equalTo(90)
make.height.equalTo(90)
}
}
}
}
if comments.count != 0, comments.count != 1 {
for index in 1...comments.count-1 {
comments[index].backgroundColor = UIColor.gray
contentView.addSubview(comments[index])
comments[index].snp.makeConstraints{(make) in
make.leading.equalTo(senderNick)
make.bottom.equalToSuperview().inset(index*20)
make.width.equalTo(318)
make.height.equalTo(20)
}
}
}
}
这是我的ViewController,提供数据源:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let tweetCell = tableView.dequeueReusableCell(withIdentifier: WechatMomentListCell.identifier, for: indexPath) as? WechatMomentListCell else {
fatalError("there is no WechatMomentList")
}
let tweet = viewModel.tweetList?[indexPath.row]
for i in tweet?.images ?? [] {
let flagImage = UIImageView()
flagImage.sd_setImage(with: URL(string: i.url))
tweetCell.images.append(flagImage)
}
for i in tweet?.comments ?? [] {
let flagComment = UILabel()
flagComment.text = "\(i.sender.nick) : \(i.content)"
tweetCell.comments.append(flagComment)
}
return tweetCell
}
图像 GET 请求已使用 Alamofire 在 ViewModel 中定义。
第一次是正确的。但是,如果我滚动屏幕,评论将再次加载并且图像会像这样乱七八糟。
我在您的表格视图单元格中发现了问题。在单元格中,您有两个这样的变量。
var images = [UIImageView()]
var comments = [UILabel()]
每次您使用此单元格时,图像和评论都会被附加。确保每次使用此单元格时都重置这些数组。比如在初始化时将主题设置为空。