J'ai implémenté UICollectionView, la taille de la cellule est w90 h90. Lorsque je l'exécute sur iPhone 6, j'obtiens le bon espacement entre les cellules, mais lorsque je le fais sur l'iPhone 5, j'obtiens plus d'espacement entre les cellules. Ma question est de savoir comment puis-je changer la taille de la cellule en fonction de la taille de l'écran du périphérique , supposons que si la taille de la cellule était w80 h80, j'obtiens aussi des résultats corrects sur l'iPhone 5. ce que je suis en train de faire est
override func viewWillAppear(animated: Bool) {
var scale = UIScreen.mainScreen().scale as CGFloat
println("Scale :\(scale)")
var cellSize = (self.collectionViewLayout as UICollectionViewFlowLayout).itemSize
println("Cell size :\(cellSize)")
imageSize = CGSizeMake(cellSize.width * scale , cellSize.height * scale)
println("Image size : \(imageSize)")
}
// sizeForItemAtIndexPath
func collectionView(collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
{
return imageSize!
}
Résultat sur iPhone 6:
Résultat sur iPhone 5s
Objective-C/Swift convient parfaitement pour la solution ..__ Merci.
Pour une réponse un peu plus flexible
Vous permet d'ajuster le nombre de colonnes et l'espacement, en développant la réponse de Zaid Pathan
// MARK: UICollectionViewDelegateFlowLayout delegate method
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
{
let cellSpacing = CGFloat(2) //Define the space between each cell
let leftRightMargin = CGFloat(20) //If defined in Interface Builder for "Section Insets"
let numColumns = CGFloat(3) //The total number of columns you want
let totalCellSpace = cellSpacing * (numColumns - 1)
let screenWidth = UIScreen.mainScreen().bounds.width
let width = (screenWidth - leftRightMargin - totalCellSpace) / numColumns
let height = CGFloat(110) //whatever height you want
return CGSizeMake(width, height);
}
I wanted 3 item in a section in Both IPad and iPhone. I worked out using the following code. Hope it helps!
1 ) Implement UICollectionViewDelegateFlowLayout delegate
2 ) var device = UIDevice.currentDevice().model
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
{
if (device == "iPad" || device == "iPad Simulator")
{
return CGSizeMake((UIScreen.mainScreen().bounds.width-15)/3,230)
}
return CGSizeMake((UIScreen.mainScreen().bounds.width-10)/3,120)
}
Objective-c
exemple:
utiliser cette fonction
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return CGSizeMake(Your desired width, Your desired height);
// example: return CGSizeMake(self.view.frame.size.width-20, 100.f);
}
Pour développer la réponse de Tim , une petite mise en garde concerne les largeurs de points partielles: L'arrondi des largeurs de points partiels peut entraîner une largeur plus large que ne le permet le nombre de colonnes souhaitées. Une façon de contourner ce problème consiste à tronquer la largeur à l'aide de trunc ():
return CGSizeMake(trunc(width), height)