Расширяемая проблема с UICollectionViewCell - PullRequest
0 голосов
/ 19 октября 2018

У меня есть uicollectionview с расширяемыми uicollectionviewcells.На iPhone у каждой строки есть 1 столбец, проблем нет.Но на iPad в строке есть 2 столбца, и после расширенной ячейки возникает проблема.

Вот снимок экрана с ячейками. не расширен

расширен

Я перезагружаю элементы при нажатии кнопки со стрелкой

self.collectionView.reloadItems(at: [indexPath])

sizeforitem func

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let height = store.pickList[indexPath.row].expanded ? CGFloat(414) : CGFloat(168)
    var width = CGFloat(0)

    if Constants.isPad { width = (self.view.frame.size.width - 25 - 12 - 12) / 2 }
    else { width = self.view.frame.size.width - 12 - 12 }

    return CGSize(width: width, height: height)
}

CellforRowAt:

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


    .....
    if data.expanded {
        UIView.animate(withDuration: 0.25, animations: {
            cell.bottomView.frame = CGRect(x: 0, y: 372, width: cell.frame.width, height: 42)
            cell.expandArrow.setBackgroundImage(UIImage(named: "ok2"), for: .normal)
        }, completion: { result in
            UIView.animate(withDuration: 0.2, animations: {
                cell.detailView.alpha = 1
            })
        })
    }
    else {
                    UIView.animate(withDuration: 0.25, animations: {
            cell.detailView.alpha = 0
        }, completion: { result in
            UIView.animate(withDuration: 0.2, animations: {
                cell.expandArrow.setBackgroundImage(UIImage(named: "ok"), for: .normal)
                cell.bottomView.frame = CGRect(x: 0, y: 124, width: cell.frame.width, height: 42)
            })
        })
    }

    return cell
}

Когда я расширяю ячейку, строка расширяется также.Что не так с моей реализацией?Спасибо

1 Ответ

0 голосов
/ 19 октября 2018

Это происходит потому, что вы, похоже, используете (self.view.frame.size.width - 25 - 12 - 12) / 2 в качестве ширины ячейки при ее отображении на iPad.

Деление вычисленного значения на 2 только для iPad дает UICollectionView достаточноместо для отображения более 1 ячейки в одной строке.В случае других устройств у вас нет этого деления на 2, что позволяет отображать только 1 ячейку подряд.

Следовательно, вам придется либо обновить свой расчет, чтобы удалить деление на2, или, если это так, что для iPad необходимо, чтобы ячейка составляла только половину вашего вычисленного значения, внедрите метод делегата imumInterItemSpacing :

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    if Constants.isPad {
        // Replace this with whatever that suits your need.
        return 70.0
    } else {
        // Replace this with whatever that suits your need.
        return 10.0
    }
}

Это будетпредоставьте двум последовательным элементам достаточно места для отображения только одного элемента в строке.Вы можете изменить вышеприведенные значения, чтобы ячейки выглядели так, как вам хотелось бы.

...