2017-02-20 13 views
1

У меня есть gridlist, который выглядит, как этокак размер ячейки в GridView

class ListViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout{ 

private var collection: ACollection? 
private var collectionViewLayout:UICollectionViewFlowLayout? 


override func loadView() { 
    super.loadView() 

    collectionViewLayout = UICollectionViewFlowLayout() 
    collectionViewLayout?.itemSize.width = 128 
    collectionViewLayout?.itemSize.height = 227 
    view = UICollectionView(frame: CGRect.zero, collectionViewLayout: collectionViewLayout!) 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let someObj: SomeObj = collection!.getObject(index: indexPath.item) 
    let cell: UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: NSStringFromClass(UICollectionViewCell.self), for: indexPath as IndexPath) 
    let cellView: UIImageView = UIImageView(image: object.image) 

    cellView.frame = cell.bounds 
    cell.contentView.addSubview(cellView) 
    return cell 
} 

Я хотел бы мои клетки имеют различные соотношения сторон, хотя в зависимости от значения в someObj. Как изменить размер ячеек без их перекрытия? Я попытался сделать

cellView.frame = CGRect(x:0,y:0,width:100,height:300) 
cellView.frame =cell.bounds 

но ячейки перекрываются.

+0

Я считаю, что вы должны реализовать функцию 'collectionView (, layout: sizeForItemAt:)' в 'UICollectionViewDelegateFlowLayout', так как похоже, что вы используете раскладку потока. – sCha

+0

@sCha Это работает несколько. Я вижу, что когда я меняю размер, он рисует ячейку со старым размером, а другой сверху с новым размером – user2175783

ответ

1

Возможно, я подробно расскажу о проблеме.

Во-первых, если вы реализуете collectionView(_:layout:sizeForItemAt:) метод, вам не нужно указать следующее:

collectionViewLayout?.itemSize.width = 128 
collectionViewLayout?.itemSize.height = 227 

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

Во-вторых, перекрытия, которые вы видите поверх каждой ячейки по умолчанию, вероятно, являются cellView s (UIImageView), которые вы добавляете для повторно используемых ячеек. Проблема в том, что вы пытаетесь добавить UIImageView в текущую ячейку каждый раз, когда делегат запрашивает ячейку. Вам нужно будет проверить, есть ли UIImageView, так как вся ячейка могла быть повторно использована, все еще имея изображение, которое было добавлено ранее.

+0

. Как проверить, существует ли UIImageView? – user2175783

+1

@ user2175783 либо вы добавляете тег в представление, либо ссылаетесь на него с помощью метода viewWithTag, или вы можете определить пользовательскую ячейку и использовать ее так, чтобы она включала все необходимые для просмотра области. Я лично рекомендую второй вариант, но первый вариант - намного проще. – sCha

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

  • Нет связанных вопросов^_^