2017-02-20 2 views
1

ich eine gridlist haben, die wie folgtwie man Größe Zelle in 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 
} 

sieht würde ich meine Zellen mag verschiedene Seitenverhältnisse haben einen Wert in someObj obwohl abhängig. Wie kann ich die Größe der Zellen ändern, ohne dass sie sich überschneiden? Ich habe versucht,

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

zu machen, aber die Zellen überlappen.

+0

Ich glaube, Sie sollten 'collectionView (, layout: sizeForItemAt:)' -Funktion in der 'UICollectionViewDelegateFlowLayout' implementieren, da es so aussieht, als ob Sie das Flow-Layout verwenden. – sCha

+0

@sCha Das funktioniert etwas. Was ich sehe ist, dass, wenn ich die Größe ändere, es eine Zelle mit der alten Größe zeichnet, dann eine andere oben mit der neuen Größe – user2175783

Antwort

1

Vielleicht werde ich ein wenig mehr über das Problem ausarbeiten.

Erstens, wenn Sie collectionView(_:layout:sizeForItemAt:) Methode implementieren, müssen Sie nicht die folgenden angeben:

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

, die eine Standardgröße für jede Zelle ist.

Zweitens, Überschneidungen, die Sie oben auf jeder Standardzelle sehen, sind wahrscheinlich die cellView s (UIImageView s), die Sie auf wiederverwendete Zellen hinzufügen. Das Problem ist, Sie versuchen, UIImageView auf der aktuellen Zelle hinzuzufügen, jeder einzelne Delegat fragt nach der Zelle. Sie müssen überprüfen, ob die UIImageView bereits vorhanden ist, da die gesamte Zelle möglicherweise wiederverwendet wurde und immer noch die zuvor hinzugefügte Bildansicht enthält.

+0

Wie überprüfe ich, ob UIImageView schon da ist? – user2175783

+1

@ user2175783 Entweder Sie fügen der Ansicht ein Tag hinzu und referenzieren es mit der Methode 'viewWithTag' oder Sie definieren eine benutzerdefinierte Zelle und verwenden sie, so dass sie alle benötigten Unteransichten enthält. Ich persönlich empfehle die zweite Option, aber die erste Option ist viel einfacher zu gehen. – sCha

Verwandte Themen