¿Cómo cambiar el tamaño de las celdas de vista de colección según el tamaño de pantalla del dispositivo?

Noté que las celdas siempre seguirían la definición en el inspector de tamaño. Incluso si ya he aplicado UICollectionViewDelegateFlowLayout.

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

Así es como se ve. Pero quiero que las celdas se vean como eran en una pantalla de iphone más pequeña.

introduzca la descripción de la imagen aquí

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CGFloat height = self.view.frame.size.height; CGFloat width = self.view.frame.size.width; // in case you you want the cell to be 40% of your controllers view return CGSizeMake(width*0.4,height*0.4) } 

Una forma de hacerlo es mantener la relación de aspecto de la celda y dar un tamaño como este:

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { if (screenheight < 667) { return CGSize(width: 155, height: 200) } else if (screenheight < 736) { return CGSize(width: 182, height: 220) } else { return CGSize(width: 200, height: 230) } } 

Debe intentar usar una ecuación simple al configurar el tamaño de su celda en lugar de un número como el siguiente:

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize(width: view.frame.width / 2, height: 350) } 

dividirlo por 2 significará que la celda siempre será la mitad del tamaño de las pantallas, la extracción y el tipo de funciones de línea mínima y / o los methods UIEdgeInset que haya llamado. Espero que esto ayude.

Según mi experiencia, debes utilizar los methods UICollectionView para get el tamaño de celda de la vista de colección del dispositivo de acuerdo con los methods siguientes, puedes get la celda dinámica de ancho y altura de la celda de la colección.

 // Dynamic width & height - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { float cellSize = collectionView.frame.size.width/values.count; return CGSizeMake(cellSize - 10, collectionView.frame.size.height); } //For top/bottom/left/right padding method - (UIEdgeInsets)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeInsetsMake(0, 0, 0, 1); } - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { float width = collectionView.frame.size.width; float spacing = [self collectionView:collectionView layout:collectionViewLayout minimumInteritemSpacingForSectionAtIndex:section]; int numberOfCells = (width + spacing) / (cellSize + spacing); int inset = (width + spacing - numberOfCells * (cellSize + spacing) ) / 2; return UIEdgeInsetsMake(0, inset, 0, inset); } - (CGFloat)collectionView:(UICollectionView *) collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger) section { return 1.0; } 

Espero que esto te ayude a diseñar tu celular en function del tamaño del dispositivo.

En swift 3, puede cambiar el tamaño de la celda de vista de colección según la pantalla utilizando collectionViewLayout propiedad collectionViewLayout .

Es decir

  let numberOfCell = 3 let cellSpecing = 10 if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout { layout.itemSize = CGSize(width: (screenSize.width - (cellSpecing * (numberOfCell + 1))) / numberOfCell, height: cellHeight) layout.invalidateLayout() } 
  func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { let theWidth = (_screenSize.width - (15*3))/2 // it will generate 2 column let theHeight = (_screenSize.height - (10*2))/3 // it will generate 3 Row return CGSize(width: theWidth ,height: theHeight) }