Задача: См. video. Я загружаю изображения из хранилища Firebase и выводя их на ячейку таблицы. После того, как я создаю приложение, изображения не отображаются в первых ячейках табличного представления. После прокрутки вниз и резервного копирования я вижу изображения в первых ячейках таблицы.UIImage не отображается в виде таблицы до прокрутки
Я консультировался это question (клиринговые данные приложения & кэш тренажера не работали), и это question (другая проблема б/с они загрузив изображение из URL). Я прочитал this об использовании образа-заполнителя, но я не уверен, что он применим, потому что я не использую SDWebImage, и моя ячейка использует мой собственный companyImage
UIImageView
, а не imageView
, который поставляется с ячейкой UITableView
.
Код:
Company View Controller:
class CompanyViewController: UIViewController, UISearchBarDelegate, UIScrollViewDelegate, UITableViewDelegate, UITableViewDataSource {
override func viewDidLoad() {
super.viewDidLoad()
companyTableView.register(CompanyTableViewCell.self, forCellReuseIdentifier: "CompanyTableViewCell")
companyTableView.register(UINib(nibName: "CompanyTableViewCell", bundle: nil), forCellReuseIdentifier: "CompanyTableViewCell")
loadData()
}
func loadData() {
databaseHandle = databaseRef?.child("companies").observe(.value, with: { (snapshot) in
for item in snapshot.children.allObjects as! [FIRDataSnapshot] {
let company = Company()
let id = item.childSnapshot(forPath: Property.id.rawValue).value as! String
let imageName = id + ".png"
let imageRef = self.storageRef?.child(imageName)
imageRef?.data(withMaxSize: 1 * 1024 * 1024) { data, error in
if let error = error {
print((error as Error).localizedDescription)
} else if let data = data {
// Data for "images/companyid.png" is returned
company.image = UIImage(data: data)
}
}
self.informationStateController?.addCompany(company: company)
}
DispatchQueue.main.async {
self.companyTableView.reloadData()
}
})
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let company = (self.informationStateController?.companies[indexPath.row])!
let customCell = tableView.dequeueReusableCell(withIdentifier: CompanyTableViewCell.identifier) as! CompanyTableViewCell
customCell.companyImage.image = company.image
return customCell
}
}
компании Table View Cell
class CompanyTableViewCell: UITableViewCell {
@IBOutlet weak var companyImage: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
companyImage.contentMode = .scaleAspectFit
}
}
Добро пожаловать. Вы хотя бы попытались использовать образ заполнителя? Если это решение работает для 'SDWebImage', оно должно быть применимо здесь. Я бы по крайней мере рекомендовал попробовать, чтобы увидеть, что происходит. – Pierce
Вы пытались отладить, возвращает ли 'company.image' что-либо в функции' tableView: cellForRowAt: 'для первой загрузки экрана? –
О, ладно, я просто сделал это, потому что для первого загружаемого экрана все изображения семи ячеек возвращают 'nil', но когда я прокручиваю вниз и прокручиваю назад, я получаю' Необязательный (, {1998, 496 }) ',' Необязательно (, {646, 218}) 'и т. Д. –
14wml