CollectionViewCell не работает должным образом при сопоставлении данных - PullRequest
0 голосов
/ 11 декабря 2018

У меня проблема с использованием uicollectionview.Когда я делаю коллекцию viewview и создаю uilabel в collectionviewcell, внезапно uilabel исчезает.

Сначала моя раскадровка выглядит так: storyBoardImage

и мой источник похож наэто:

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

    cell.folderLabel.frame.size.width = cellSize
    cell.folderLabel.frame.size.height = 20
    cell.folderImage.frame.size.width = cellSize
    cell.folderImage.frame.size.width = cellSize

    cell.folderLabel.text = ""
    cell.folderLabel.textColor = UIColor.flatWhite

    if(nameList[indexPath.row] == "")
    {
        cell.folderLabel.text = ""
        cell.folderLabel.frame.size = CGSize(width: 0, height: 0)
        cell.folderImage.frame.size = CGSize(width: cellSize, height: cellSize + 20)
    }

    cell.folderImage.image = imgList[indexPath.row]
    cell.folderLabel!.text = nameList[indexPath.row]

    return cell
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
{
    if(nameList[indexPath.row] != "")
    {
        if(nameList[indexPath.row] != "⤴︎")
        {
            currentAlbum = nameList[indexPath.row]
        }
        var selectedAlbum = ""
        selectedAlbum = nameList[indexPath.row]
        setImageInformation(albumName: selectedAlbum)
        folderCollectionView.reloadData()
        collectionView.performBatchUpdates({UIView.animate(views: self.folderCollectionView.orderedVisibleCells, animations: animations, completion: nil)} , completion: nil)
    }
    else
    {
        let imageData = imgList[indexPath.row].jpegData(compressionQuality: 1.0)
        goToImageViewer(data : imageData!)
    }
}

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

enter image description here

Но когда я идув папку и вернитесь снова, ярлык папки исчез.

enter image description here

Когда я отлаживаю, данные выглядят примерно так:

print ("ASJ DATA: (nameList [indexPath.row]) + (indexPath.row) + (cell.folderLabel.text) + (cell.folderLabel.frame.size.height) + (cell.folderImage.frame.size.высота) ")

ASJ DATA: dfgdfgd + 0 + Необязательно (" ") + 20,0 + 105,0

cell.folderLabel.text: Необязательно (" dfgdfgd ")

ДАННЫЕ ASJ: dgd + 1 + Необязательно ("") + 20,0 + 105,0

cell.folderLabel.text: Необязательно ("dgd")

ДАННЫЕ ASJ: dsdfsdf + 2 + Необязательно ("") + 20,0 + 105,0

cell.folderLabel.text: Необязательно ("dsdfsdf")

ASJ DATA: sdf + 3 + Необязательно ("") + 20,0 + 105,0

cell.folderLabel.text: Необязательно ("sdf")

ASJ DATA: sdff + 4 + Необязательно ("") + 20,0 + 105,0 cell.folderLabel.text: Необязательно ("sdff")

Есть ли представление об этой ситуации или о некоторых проблемах?в моем источнике?Это сводит меня с ума, поэтому мне нужна помощь ... T_T Спасибо.

1 Ответ

0 голосов
/ 11 декабря 2018

Я нигде не вижу, чтобы вы устанавливали источник кадра для folderLabel (я вижу только установленный размер).Ключевым моментом является то, что когда вы устанавливаете размер, вы устанавливаете его (на ноль), когда текст пуст.Поскольку ячейка используется повторно, вам нужно будет постоянно устанавливать размер, чтобы он больше не был равен нулю.

if(nameList[indexPath.row] == "")
{
    cell.folderLabel.text = ""
    cell.folderLabel.frame.size = CGSize(width: 0, height: 0)
    cell.folderImage.frame.size = CGSize(width: cellSize, height: cellSize + 20)
}
else  // Add this
{
    cell.folderLabel.frame.size = ...
}

Во-вторых, последняя строка этого блока выглядит неправильно:

 cell.folderLabel.frame.size.width = cellSize
 cell.folderLabel.frame.size.height = 20
 cell.folderImage.frame.size.width = cellSize
 cell.folderImage.frame.size.width = cellSize // should be size.height
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...