Ich versuche , hinzufügen UICollectionView
zu ViewController
, und ich brauche 3 - Zellen haben ‚pro Zeile‘ ohne Leerzeichen zwischen den Zellen (wie ein Gitter aussehen soll). Die Zellenbreite sollte ein Drittel der Bildschirmgröße betragen, daher dachte ich, dass die layout.item
Breite gleich sein sollte. Aber dann verstehe ich das:
Wenn ich diese Größe reduziere ( z. B. um 7 oder 8 Pixel ), ist es besser, aber die dritte Zelle in der Reihe ist nicht vollständig sichtbar, und ich habe immer noch diese Leerstelle (oben und unten sowie links und rechts).
class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
var collectionView: UICollectionView?
var screenSize: CGRect!
var screenWidth: CGFloat!
var screenHeight: CGFloat!
override func viewDidLoad() {
super.viewDidLoad()
screenSize = UIScreen.mainScreen().bounds
screenWidth = screenSize.width
screenHeight = screenSize.height
// Do any additional setup after loading the view, typically from a nib
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.sectionInset = UIEdgeInsets(top: 20, left: 0, bottom: 10, right: 0)
layout.itemSize = CGSize(width: screenWidth / 3, height: screenWidth / 3)
collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
collectionView!.dataSource = self
collectionView!.delegate = self
collectionView!.registerClass(CollectionViewCell.self, forCellWithReuseIdentifier: "CollectionViewCell")
collectionView!.backgroundColor = UIColor.greenColor()
self.view.addSubview(collectionView!)
}
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 20
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CollectionViewCell", forIndexPath: indexPath) as CollectionViewCell
cell.backgroundColor = UIColor.whiteColor()
cell.layer.borderColor = UIColor.blackColor().CGColor
cell.layer.borderWidth = 0.5
cell.frame.size.width = screenWidth / 3
cell.frame.size.height = screenWidth / 3
cell.textLabel?.text = "\(indexPath.section):\(indexPath.row)"
return cell
}
}
Antworten:
Fügen Sie diese 2 Zeilen hinzu
Also hast du:
Dadurch werden alle Leerzeichen entfernt und Sie erhalten ein Rasterlayout:
Wenn die erste Spalte eine Breite haben soll, die der Bildschirmbreite entspricht, fügen Sie die folgende Funktion hinzu:
Das Rasterlayout sieht nun folgendermaßen aus (ich habe der ersten Zelle auch einen blauen Hintergrund hinzugefügt):
quelle
Für Swift 3 und XCode 8 funktionierte dies. Führen Sie die folgenden Schritte aus, um dies zu erreichen: -
Fügen Sie diesen Code in die Funktion viewDidLoad () ein.
quelle
In bestimmten Situationen wirkt sich das Festlegen von
UICollectionViewFlowLayout
inviewDidLoad
oderViewWillAppear
möglicherweise nicht auf die collectionView aus.Die Einstellung
UICollectionViewFlowLayout
inviewDidAppear
kann bewirken , dass die Veränderungen der Zellen Größen im laufenden Betrieb sehen.Eine andere Lösung in Swift 3:
quelle
Wenn Sie nach Swift 3 suchen, befolgen Sie die folgenden Schritte, um dies zu erreichen:
Dies wird auf Xcode 8.0 mit Swift 3 überprüft.
quelle
quelle
Swift 4
quelle
Für Swift 3 und XCode 8 funktionierte dies. Führen Sie die folgenden Schritte aus, um dies zu erreichen: -
quelle
Für Swift 3+ und Xcode 9+ Versuchen Sie dies
quelle