2017-07-07 4 views
0

Dans mon projet, ma cellule de vue de collection comprend toute la largeur et la hauteur de l'écran, je l'ai mise en défilement horizontal et pour la rendre dynamique pour toutes les tailles d'écran. Son fonctionnement parfaitement bien et prend soin de la largeur et la hauteur de toutes les screenizes mais le problème est que sur le défilement, c'est la coupe de l'écran du bord droit, j'ai essayé de l'appliquer avec une méthode différente viewDidLayoutSubViews() de uicollectionviewdelegateflowlayout et il prend aussi soin des écrans, mais a toujours le même problème. La première image est la cellule d'origine comment il devrait apparaître.CollectionView Cell taille dynamique pour toutes les tailles d'écran

original cell

l'image suivante est la façon dont il coupe le bord droit sur le défilement. Initialement j'ai staticofIteminSection et continue à couper à chaque coup. Celui-ci est le résultat du troisième ou quatrième balayage. J'ai activé la pagination, donc je ne sais pas quel est le problème ici.

enter image description here

J'ai vérifié divers postes de débordement de la pile en ce qui concerne cela, mais rien ne semble aider et je suis coincé. Toute aide serait grandement appréciée.

Répondre

0

Vous devez vérifier les tailles d'écran dans sizeForItemAtIndexPath comme:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 

     let screenSize: CGRect = UIScreen.main.bounds 
     let screenWidth = screenSize.width 

     if screenWidth == 414{ 
      return CGSize(width: collectionViewTable.bounds.size.width - 4, height: collectionViewTable.bounds.size.height - 50) 

     }else if screenWidth == 375{ 

      return CGSize(width: collectionViewTable.bounds.size.width - 4, height: collectionViewTable.bounds.size.height - 50) 
     }else{ 

      return CGSize(width: collectionViewTable.bounds.size.width - 4, height: collectionViewTable.bounds.size.height - 50) 
     } 
    } 

Ajouter ces fonctions aussi et personnaliser en fonction de vos besoins:

func collectionView(_ collectionView: UICollectionView, 
          layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { 
      return UIEdgeInsetsMake(5, 14, 5, 14) 
     } 
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat { 
      return 4; 
     } 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat { 
     return 4; 
    } 

Si cela ne fonctionne pas alors changer UIEdgeInsetsMake dans insetForSectionAt.

+0

@UsamabinAttique Cette application a-t-elle fonctionné? –