Estoy tratando de añadir UICollectionView
a ViewController
, y tengo que tener 3 células 'por fila' sin espacio en blanco entre las células (que debe ser similar una rejilla). El ancho de la celda debe ser un tercio del tamaño de la pantalla, así que pensé que el layout.item
ancho debería ser el mismo. Pero luego me sale esto:
Si reduzco ese tamaño (en 7 u 8 píxeles, por ejemplo), es mejor, pero la tercera celda en la fila no es completamente visible, y todavía tengo ese espacio en blanco (arriba y abajo, e izquierda y derecha).
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
}
}
Respuestas:
Agrega estas 2 líneas
Así que tienes:
Eso eliminará todos los espacios y le dará un diseño de cuadrícula:
Si desea que la primera columna tenga un ancho igual al ancho de la pantalla, agregue la siguiente función:
El diseño de la cuadrícula ahora se verá (también he agregado un fondo azul a la primera celda):
fuente
Para Swift 3 y XCode 8 , esto funcionó. Siga los pasos a continuación para lograr esto: -
Coloque este código en la función viewDidLoad ().
fuente
En ciertas situaciones, la configuración de
UICollectionViewFlowLayout
inviewDidLoad
oViewWillAppear
puede no afectar el collectionView.Establecer el
UICollectionViewFlowLayout
inviewDidAppear
puede causar ver los cambios de los tamaños de las celdas en tiempo de ejecución.Otra solución, en Swift 3:
fuente
Si está buscando Swift 3, siga los pasos para lograrlo:
Esto se verifica en Xcode 8.0 con Swift 3.
fuente
fuente
Swift 4
fuente
Para Swift 3 y XCode 8, esto funcionó. Siga los pasos a continuación para lograr esto: -
fuente
Para Swift 3+ y Xcode 9+ Intente usar esto
fuente
Swift 5: para espacios distribuidos uniformemente entre celdas con ancho de celda dinámico para aprovechar al máximo el espacio del contenedor, puede usar el fragmento de código a continuación proporcionando un valor mínimo de Ancho de celda .
fuente