ios - reusable - ¿Cómo cambiar el tamaño de UICollectionViewCell mediante programación en Swift?
uicollectionview swift 4 (5)
si usas el código de Gaurav Rami abajo
let cellSize = CGSize(width:80 , height:80)
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical //.horizontal
layout.itemSize = cellSize
layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
layout.minimumLineSpacing = 1.0
layout.minimumInteritemSpacing = 1.0
myCollectionView.setCollectionViewLayout(layout, animated: true)
y obtenga este mensaje: " Hacer una instantánea de una vista que no se ha representado arroja resultados en una instantánea vacía. Asegúrese de que su vista se haya renderizado al menos una vez antes de realizar instantáneas o instantáneas después de las actualizaciones de la pantalla " .
myCollectionView.setCollectionViewLayout(layout, animated: false)
entonces el mensaje desaparecerá
Tengo un UICollectionView
con un segmented control
para cambiar entre los datos. Pero, ¿cómo cambio las propiedades de tamaño de UICollectionViewCell
programática ? luego puedo personalizar cada estilo de forma apropiada para cada tipo de datos.
Por ejemplo, cambie el ancho a 520 puntos y la altura a 100. Soy nuevo en el desarrollo de iOS y tengo experiencia con CSS: /
Sé cómo hacerlo en Xcode (obviamente) pero no conozco los métodos correctos para cambiarlo rápidamente. Cualquier idea o comentario es muy apreciado (Y)
Swift 3
No se invocarán los métodos de la respuesta @ sumit-oberoi si está utilizando Swift 3. Para que funcione, realice estos ajustes:
Conforme al protocolo
UICollectionViewDelegateFlowLayout
.Implementa estos métodos:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { return 1.0 } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { return 1.0 }
Observe los cambios:
- agregar
_
antes decollectionView
en el nombre del método -
NSIndexPath
cambia aIndexPath
Swift 3
override func viewDidLoad() {
super.viewDidLoad()
let cellSize = CGSize(width:80 , height:80)
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical //.horizontal
layout.itemSize = cellSize
layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
layout.minimumLineSpacing = 1.0
layout.minimumInteritemSpacing = 1.0
myCollectionView.setCollectionViewLayout(layout, animated: true)
myCollectionView.reloadData()
}
//Use for size
func collectionView(collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
}
//Use for interspacing
func collectionView(collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
return 1.0
}
func collectionView(collectionView: UICollectionView, layout
collectionViewLayout: UICollectionViewLayout,
minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
return 1.0
}
// Para swift 3
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 1.0
}
func collectionView(_ collectionView: UICollectionView, layout
collectionViewLayout: UICollectionViewLayout,
minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 1.0
}
first Conform protocol the UICollectionViewDelegateFlowLayout
set width and height UICollectionViewCell
UIcollectionViewCell Hight = 300;
UIcollectionViewCell Width = 380;
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: CGFloat((380)), height: CGFloat(300))
}