Comment obtenir la mise en page automatique de la taille de la UICollectionViewCells dans iOS 8? (systemLayoutSizeFittingSize retourne la taille avec une hauteur nulle dans iOS 8)
Depuis iOS 8 [UIColletionViewCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]
renvoie une taille avec une hauteur de 0.
Voici ce que fait le code:
Pour déterminer la taille de la cellule dans un UICollectionView
dans iOS 7-je utiliser systemLayoutSizeFittingSize:
sur une cellule définie dans un fichier xib à l'aide de mise en page automatique. La taille dépend de la taille de la police d'un UILabel
être une sous-vue de la UICollectionViewCell
dans mon fichier xib. L'étiquette de police est fixé à UIFontTextStyleBody
. Donc, fondamentalement, de la cellule la taille dépend de la taille de la police réglages effectués dans iOS 7.
Voici le code en lui-même:
+ (CGSize)cellSize {
UINib *nib = [UINib nibWithNibName:NSStringFromClass([MyCollectionViewCell class]) bundle:nil];
//Assumption: The XIB file only contains a single root UIView.
UIView *rootView = [[nib instantiateWithOwner:nil options:nil] lastObject];
if ([rootView isKindOfClass:[MyCollectionViewCell class]]) {
MyCollectionViewCell *sampleCell = (MyCollectionViewCell*)rootView;
sampleCell.label.text = @"foo"; //sample text without bar
[sampleCell setNeedsLayout];
[sampleCell layoutIfNeeded];
return [sampleCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
}
return CGSizeZero;
}
Il fonctionne parfaitement bien dans iOS 7, mais pas dans iOS 8. Malheureusement, je n'ai aucune idée de pourquoi.
Comment puis-je obtenir la mise en page automatique de la taille de la UICollectionViewCells dans iOS 8?
PS: à l'Aide de
return [sampleCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
au lieu de
return [sampleCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
que quelqu'un pourrait le suggérer, ne fait aucune différence.
- J'ai le même problème: sur iOS 7 [cellule systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].hauteur retourne la bonne taille: sur iOS 8 toujours 0. Je trouve que c'est la construction soit avec iOS7 OU iOS 8 Kits de développement logiciel. Désolé je ne peux pas aider, mais heureux que je ne suis pas le seul! J'ai déposé ce radar: 17959753
- J'ai exactement le même problème. J'ai été jouer avec elle toute la journée et ne pouvais pas trouver une solution. Changer l'collectionViewCell.contentView n'a pas aidé.
- Je vais avoir le même problème, l'expérimentation a montré qu'elle pourrait avoir quelque chose à faire avec les contraintes ajoutée via interface builder qui sont contre la cellule de vue au lieu de la cellule.contentView. Ajout de contraintes avec le code contre la contentView résout ce problème en partie
- c'est UICollectionViewCells IB masque le contenu de la vue, alors qu'avec UITableViewCells il ne l'est pas, ce qui rend plus difficile de savoir où les contraintes sont en cours de création. Comme maremmle dit dans la question, [sampleCell.contentView systemLayoutSizeFittingSize:...] travaille dans la vue tableau de cellules. La chose étrange ici, c'est que c'est définitivement cassé/modifié sur iOS 8, depuis la construction soit avec SDK échoue sur un iOS 8 appareil.
- qu'entendez-vous par résoudre partiellement? La hauteur de revenir en tant que non-zéro?
- Je veux dire, il serait de retour de la taille correcte, mais le contenu de la cellule n'est pas toujours visible jusqu'
- Nous ne pouvons que prier pour que ce problème est résolu par Apple avec le GM, comme nous ne pouvons pas essayer si il a été fixé avec la Bêta 6. Quelqu'un s'est déjà trouvé une solution raisonnable?
- Pas encore fixé sur Xcode 6 Beta 7.
- Après avoir fait quelques tests, il semble que le travail sur iOS8 GM construit avec Xcode 6 GM.
- Pour moi, Xcode 6 GM il fonctionne sous iOS 8 mais maintenant, iOS 7 retourne 0! =(
- Je suis d'avoir exactement le même problème! Veuillez mettre à jour ici si vous trouver une solution. Si son affectant iOS 7, serait-ce un bug avec XCode et pas l'iOS 8 GM?
- J'ai trouvé un correctif dans un autre Thread pour ça: stackoverflow.com/questions/24750158/...
Vous devez vous connecter pour publier un commentaire.
Ressemble a un bug: j'ai déposé un rapport qui a été fermé comme un double de cette une
Présentera son rapport lors de la Beta 6 est sorti.
[Mise à jour: travailler correctement dans les semences GM d'iOS 8, et le bug a été fermé par Apple.]
Ce que vous devez faire est d'envelopper l'ensemble de votre contenu dans un récipient, puis composez le:
Votre cellule devrait ressembler à ceci: cellule> containerView -> sous vues
Cela fonctionne sur les deux ios7 & ios8.
Soi-disant sur ios8, tout ce que vous avez à faire est de définir la estimateSize & cellule sera automatiquement automatique de la taille sur son propre. Apparemment, ce n'est pas que de la bêta 6.
Nous sommes à l'aide d'un travail pour le moment, copié ci-dessous. Espérons que ces problèmes seront résolus avant iOS 8 release et nous pouvons retirer de cette. (La bidouille suppose la connaissance d'Apple implicite contentView comportement, et nous avons à pirater IB prise de références à toutes les contraintes que nous transfert).
Nous remarquons qu'ils sont également de supprimer tous les autoresizingMasks de storyboards/Plumes pendant la mise à niveau, ce qui est logique étant donné que c'est censé être de l'auto-mise en page, mais les vues de la collection encore de retour aux sources & struts. Peut-être que cela a été négligé dans la purge?
--Dan
C'est un bug dans xCode6 et iOS 8 SDK en cours d'exécution sur iOS7 périphériques 🙂
Il est presque étranglé ma journée. Enfin, il a travaillé avec le code ci-dessous dans le UICollectionViewCell sous-classe. J'espère que ce sera corrigé dans la prochaine version
J'ai eu le même problème pour UITableViewCells et iOS 7 (ios8 fonctionne parfaitement), mais "Triet Luong" solution a fonctionné pour moi:
Ce n'est pas un bug, j'ai été aux prises avec ce problème depuis un certain temps et ont essayé différentes choses, je donne ci-dessous les étapes qui a fonctionné pour moi:
1) utilisation contentView [sampleCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
2) vous pouvez créer votre propre contentView et d'avoir les sous-vues ajoutée à la contentView, n'oubliez pas de code pin le haut, en bas et à gauche et à droite de la contentView si vous êtes en utilisant une mesure contentView à la superView, si vous ne le faites pas à la hauteur sera de 0, ici également, selon vos besoins, vous pouvez pour. e.g pas épingler le bas de la contentView à la superView de sorte que la hauteur de la vue peut varier, mais l'épinglage est important et l'épinglage de qui l'on dépend de vos besoins.
3) définir les contraintes correctement dans interface builder en fonction de vos besoins, il existe certaines contraintes qui ne peuvent être ajoutés dans interface builder, mais ensuite, vous pouvez les ajouter dans le viewDidLoad de la viewController.
Donc mes 2 cents d'entrée est que les contraintes doivent être placées correctement dans l'interface builder pour systemLayoutSizeFittingSize:UILayoutFittingCompressedSize de retour de dimensions correctes, c'est la solution les gars.
peut-être que vous avez une certaine mauvaise contraindre, vous devez spécifier à la fois virtical supérieur de l'espace et en bas de l'espace entre votre UIView et contentView, j'ai aussi eu ce problème avant, c'est juste parce que j'ai spécifié le virtical supérieur de l'espace, et n'a pas specfied la virtical bas de l'espace de contentView
C'était un bug dans iOS 8 beta versions. Enfin, il est fixé avec pour iOS 8 GO (Build 12A365). Donc, pour moi, maintenant, il fonctionne avec le même code que j'ai écrit pour iOS 7. (voir la question)