J'ai remarqué que les cellules suivraient toujours la définition de l'inspecteur de taille. Même si j'ai déjà appliqué UICollectionViewDelegateFlowLayout.
Donc, c'est comme ça. Mais je veux que les cellules ressemblent plutôt à comment c'était sur un écran d'iPhone plus petit.
- (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);
}
Swift 4
Vous pouvez faire quelque chose comme ça:
class yourClassName: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: self.myCollectionView.frame.height / 6 * 5, height: self.myCollectionView.frame.height / 6 * 5)
}
}
self.myCollectionView
est la référence de votre vue de collection.
il est important de mettre en œuvre UICollectionViewDelegateFlowLayout
Et comme il ne conviendra pas à une autre cellule, vous n’auriez qu’une rangée.
Vous devriez essayer d'utiliser une équation simple lorsque vous définissez la taille de votre cellule plutôt que le nombre, comme ceci:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: view.frame.width / 2, height: 350)
}
en le divisant par 2, la cellule aura toujours la moitié de la taille de l'écran, des fonctions de suppression et des types de fonctions minimumLineSpacing et/ou des méthodes UIEdgeInset que vous avez appelées. J'espère que cela t'aides.
Dans Swift 3, vous pouvez redimensionner la cellule de la vue de collection en fonction de l'écran à l'aide de la propriété collectionViewLayout
.
C'est à dire.
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()
}
dans Swift 4
Vous pouvez simplement étendre votre contrôleur de vue de UICollectionViewDelegateFlowLayout
et implémenter cette méthode:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let height = collectionView.frame.height
let width = collectionView.frame.width
return CGSize(width: width, height: height)
}
dans cet exemple, la largeur des cellules est égale à la largeur de la variable CollectionView
que vous pouvez adapter. Elle dépend de vos besoins.
Selon mon expérience, vous devez utiliser des méthodes UICollectionView
pour obtenir la taille de cellule de la vue de collection spécifique à un périphérique. Les méthodes ci-dessous vous permettent d'obtenir la largeur et la hauteur dynamiques d'une cellule de la vue de collection.
// 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;
}
J'espère que cela vous aidera à concevoir votre cellule en fonction de la taille de l'appareil.