2016-09-14 4 views
1

Я только что обновил версию до Swift 3.Почему изображения не отображаются в ячейках коллекции?

Мои представления коллекции работали отлично до обновления. Я сделал рекомендуемые изменения, чтобы сделать компилятор счастливым, но теперь у меня возникла эта проблема.

Представления изображений, которые находятся в моем обычном UICollectionViewCells, просто больше не появляются. Не отображаются ни программно сгенерированные изображения, ни представления прототипов изображений.

Я дал цвета фона изображений, чтобы проверить, нет ли у меня изображений. Цвет фона не отображается, поэтому можно с уверенностью предположить, что изображения не отображаются вообще.

Ячейки сами появляются. В каждом представлении изображения есть метка внизу, и метка отображается правильно с правильным текстом.

Наиболее запутанной частью является то, что иногда появляются изображения DO, но, похоже, нет никаких рифм или причин, почему и когда.

Мой код является довольно стандартным, но я буду идти вперед и поделиться им все равно:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return searchClubs.count 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell: HomeCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! HomeCollectionViewCell 

    cell.barLabel.text = searchClubs[indexPath.row].name 
    cell.imageCell.image = searchClubs[indexPath.row].image 

    cell.imageCell.layer.masksToBounds = true 
    cell.imageCell.layer.cornerRadius = cell.imageCell.frame.height/2 

    return cell 

} 

func feedSearchClubs(child: AnyObject) { 

    let name = child.value(forKey: "Name") as! String  

    //Image 
    let base64EncodedString = child.value(forKey: "Image")! 
    let imageData = NSData(base64Encoded: base64EncodedString as! String, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters) 
    let image = UIImage(data:imageData! as Data) 

    //Populate clubs array 
    let club = Club.init(name: name, image: image!) 
    self.searchClubs.append(club) 

    DispatchQueue.main.async { 
      self.collectionView.reloadData() 
    } 
} 
+0

Я только что обновил вопрос - спасибо. – bkwebhero

+0

У меня пока ничего не написано ничего в prepareForReuse, так что это не проблема. – bkwebhero

ответ

3

С Xcode 8 вы должны вызвать layoutIfNeeded() для вычисления размера (в вашем случае, вы должны знать ячейку .imageCell.frame.height) и позицию из правил автоматического макета или использовать фиксированное значение cornerRadius.

cell.imageCell.layoutIfNeeded() 
cell.imageCell.layer.masksToBounds = true 
cell.imageCell.layer.cornerRadius = cell.imageCell.frame.height/2 

ИЛИ

cell.imageCell.layer.masksToBounds = true 
cell.imageCell.layer.cornerRadius = 5 
1

Рама ImageCell в не настроен готов в cellForItemAt метода.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell: HomeCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! HomeCollectionViewCell 

    cell.barLabel.text = searchClubs[indexPath.row].name 
    cell.imageCell.image = searchClubs[indexPath.row].image 

    return cell 
} 

Вместо поставить создание слоя на willDisplay так cell.imageCell.frame.height будет иметь свое значение.

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 
    let cell: HomeCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! HomeCollectionViewCell 

    cell.imageCell.layer.masksToBounds = true 
    cell.imageCell.layer.cornerRadius = cell.imageCell.frame.height/2 
} 
Смежные вопросы