2017-05-25 1 views
1

J'ai configuré un story-board avec une vue Stack contenant un ensemble d'étiquettes appartenant chacune à une section spécifique. Sous cette pile d'étiquettes s'exécute une vue de collection, dont la taille de cellule d'article dépend de l'étiquette directement au-dessus de lui. Dans la taille de la cellule de la première colonne, par exemple, la largeur et la hauteur sont définies par programme comme étant la largeur de l'étiquette directement au-dessus.Disposition de la vue du storyboard (iphone 4/5/6) affectant la taille de la cellule de collecte (définie par programme)

Je suis en train d'accomplir cela par:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {} 

Le problème est, la largeur de l'étiquette qui est de retour d'un

label.bounds.width 

est égale à ce que le story-board « Afficher en: » est actuellement, et pas le simulateur en cours d'exécution.

-à-dire

Si mon story-board « Afficher en: iphone 7 », et mon simulateur est en cours d'exécution d'un iPhone 5 la largeur de l'étiquette retournée est équivalent à ce que la largeur de l'étiquette serait iphone 7. Toutefois, si le simulateur correspond au "View as:" dans le storyboard, tout fonctionne parfaitement pour tout appareil.

Toutes mes contraintes sont définies, et la pile d'étiquettes et la vue de collection ajustent la taille indépendamment de n'importe quel iphone/ipad. Juste la largeur de la cellule semble être le problème.

Je viens juste de commencer le développement d'ios, donc je ne suis peut-être pas très familier avec la façon dont ils s'influencent mutuellement.

Répondre

0

Si quelqu'un a un problème similaire, je résolu ce problème dans mon projet à travers:

// collectonViewOutlet is an outlet to the collection view I am working 
// with 
    override func viewWillLayoutSubviews() { 
     collectionViewOutlet.reloadData() 
     } 

Je ne suis pas tout à fait sûr de savoir pourquoi le problème est survenu, mais il avait probablement quelque chose à voir avec le moment où les vues étaient en cours de chargement.