1

У меня есть простой UICollectionViewController, который возвращает X количество ячеек. Я хочу, чтобы это было, когда выбрана ячейка, эта конкретная выбранная ячейка изменит ее размер и станет больше по высоте, так как все остальные ячейки остаются неизменными. Как мне это достичь? Вот мой код:Изменение размера выбранной ячейки UICollectionView

class HomeController: UICollectionViewController, UICollectionViewDelegateFlowLayout { 

    let cellId = "cellId" 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     collectionView?.backgroundColor = UIColor(white: 0.90, alpha: 1.0) 

     collectionView?.register(PostCell.self, forCellWithReuseIdentifier: cellId) 
     collectionView?.showsVerticalScrollIndicator = false 
     collectionView?.alwaysBounceVertical = true 
    } 

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return 4 
    } 

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! PostCell 
     return cell 
    } 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
     let height = (view.frame.width) * 9/16 
     return CGSize(width: view.frame.width, height: height + 50 + 50) 
    } 
} 

ответ

8

Вы можете проверить, если indexPath из sizeForItemAt выбран. Если это так, вы возвращаете другую высоту, иначе возвращаете стандартную высоту.

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

    collectionView.performBatchUpdates(nil, completion: nil) 
} 

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

    switch collectionView.indexPathsForSelectedItems?.first { 
    case .some(indexPath): 
     return CGSize() // your selected height 
    default: 
     let height = (view.frame.width) * 9/16 
     return CGSize(width: view.frame.width, height: height + 50 + 50) 
    } 
} 
+0

Не могли бы вы привести пример? Спасибо. –

+0

Обязательно работайте над одним сейчас – Callam

+0

Спасибо, человек. Действительно ценю это. –

Смежные вопросы