Verwenden Sie diese Methode, um die Breite der benutzerdefinierten Zellenhöhe festzulegen.
Stellen Sie sicher, dass Sie diese Protokolle hinzufügen
UICollectionViewDelegate
UICollectionViewDataSource
UICollectionViewDelegateFlowLayout
Wenn Sie mit schnellen 5 oder Xcode 11 und später müssen Sie Satz Estimate Size
zu none
verwenden Storyboard , um es funktioniert einwandfrei . Wenn Sie dies nicht einstellen, funktioniert der folgende Code nicht wie erwartet.
Swift 4 oder höher
extension YourViewController: UICollectionViewDelegate {
//Write Delegate Code Here
}
extension YourViewController: UICollectionViewDataSource {
//Write DataSource Code Here
}
extension YourViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: screenWidth, height: screenWidth)
}
}
Ziel c
@interface YourViewController : UIViewController<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(CGRectGetWidth(collectionView.frame), (CGRectGetHeight(collectionView.frame)));
}
Stellen Sie sicher, dass Sie das Protokoll
UICollectionViewDelegateFlowLayout
in Ihrerclass
Deklaration hinzufügenquelle
Wenn Sie ein Storyboard verwenden und UICollectionViewDelegateFlowLayout überschreiben, setzen Sie in Swift 5 und Xcode 11 auch die geschätzte Größe auf Keine
quelle
UICollectionViewFlowLayout
scheint standardmäßigestimatedItemSize
aufUICollectionViewFlowLayout.automaticSize
bei der Verwendung von IB , obwohl die Dokumentation sagt sollte es standardmäßig zuCGSizeZero
. Wie Apple feststellt,automaticSize
"werden Zellen mit Selbstgröße für Ihre Sammlungsansicht aktiviert." Aus diesem Grund bewirken andere Größenänderungen bei IB nichts.Endlich die Antwort bekommen. Sie sollten erweitern
UICollectionViewDelegateFlowLayout
Dies sollte mit den obigen Antworten funktionieren.
quelle
Sie haben zwei Möglichkeiten, um die Größe von CollectionView zu ändern.
Erster Weg -> füge dieses Protokoll hinzu UICollectionViewDelegateFlowLayout
für In meinem Fall möchte ich die Zelle in 3 Teile in einer Zeile teilen. Ich habe diesen Code unten gemacht
Zweiter Weg -> Sie müssen UICollectionViewDelegateFlowLayout nicht hinzufügen, sondern stattdessen Code in die viewDidload-Funktion als folgenden Code schreiben
Unabhängig davon, ob Sie einen Code als ersten oder zweiten Weg schreiben, erhalten Sie das gleiche Ergebnis wie oben. Ich schrieb es. Es hat bei mir funktioniert
quelle
Größenverhältnis nach iPhone-Größe:
Folgendes können Sie tun, um die Breite und Höhe der Zellen in Bezug auf die iPhone-Größe zu variieren:
Und vielleicht sollten Sie auch Ihre AutoLayout-Einschränkungen für die Zelle deaktivieren, damit diese Antwort funktioniert.
quelle
Die Sammlungsansicht verfügt über ein Layoutobjekt . In Ihrem Fall ist es wahrscheinlich ein Fluss Layout ( UICollectionViewFlowLayout ). Legen Sie die
itemSize
Eigenschaft des Flusslayouts fest.quelle
In Swift3 und Swift4 können Sie die Zellengröße ändern, indem Sie UICollectionViewDelegateFlowLayout hinzufügen und Folgendes implementieren:
Wenn Sie UICollectionView programmgesteuert erstellen, können Sie dies folgendermaßen tun:
quelle
swift4 swift 4 ios sammlungsansicht sammlungsansicht beispiel xcode aktueller code arbeitsprobe
Fügen Sie dies im Abschnitt "Delegieren" oben hinzu
UICollectionViewDelegateFlowLayout
und verwenden Sie diese Funktion
///// Beispiel für vollständigen Code
In Sammlungsansicht erstellen und Sammlungsansichtszelle im Storyboard geben Verweis auf die Sammlung als
@IBOutlet schwach var cvContent: UICollectionView!
Fügen Sie dies in den View Controller ein
quelle
Versuchen Sie die folgende Methode
quelle
Swift 5 programmgesteuert
quelle
quelle
2020, ganz einfacher Weg:
Sie müssen "UICollectionViewDelegateFlowLayout" hinzufügen, oder es erfolgt keine automatische Vervollständigung:
Geben Sie "sizeForItemAt ..." ein. Du bist fertig!
Das ist es.
Beispiel, wenn Sie möchten, dass "jede Zelle die gesamte Sammlungsansicht ausfüllt":
quelle
Eine andere Möglichkeit besteht darin, den Wert direkt im Ablauflayout festzulegen
quelle
Sie müssen also im Storyboard das Attribut für collectionView in der Zellenabschnittsschätzung auf keine festlegen, und in Ihrem ViewController benötigen Sie eine Delegate-Methode zum Implementieren dieser Methode:
optional func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
quelle
Versuchen Sie, die UICollectionViewDelegateFlowLayout-Methode zu verwenden. In Xcode 11 oder höher müssen Sie die geschätzte Größe im Storyboard auf "Keine" setzen.
quelle
Ein einfacher Weg:
Wenn Sie nur eine einfache feste Größe benötigen :
Das ist alles dazu.
Ändern Sie im Storyboard einfach die Klasse von UICollectionView in SizedCollectionView.
Aber !!!
Beachten Sie, dass die Basisklasse dort "UI 'I' CollectionView" ist. 'I' für Initializer.
Es ist nicht so einfach, einer Sammlungsansicht einen Initialisierer hinzuzufügen. Hier ist ein gängiger Ansatz:
Sammlungsansicht ... mit Initialisierer:
In den meisten Projekten benötigen Sie "eine Sammlungsansicht mit einem Initialisierer". Sie werden also wahrscheinlich sowieso
UIICollectionView
(beachten Sie das zusätzliche I für Initializer!) In Ihrem Projekt haben.quelle
Dies ist meine Version. Finden Sie Ihr geeignetes Verhältnis, um die Zellengröße gemäß Ihren Anforderungen zu erhalten.
quelle