Je travaille sur une application où je suis confronté à un problème étrange. J'ai créé une entreprise utativevoie dans le storyboard et ajouté une cellule prototype. Dans cette cellule, j'ai ajouté un élément Uilabel et cet Uilabel prend toute la cellule. J'ai configuré avec la disposition automatique et ajouté des contraintes gauche, droite, haut et inférieure. L'Uilabel contient du texte.
Maintenant dans mon code, j'initialise le Rowheight et estimérowheighighighight de la vue Table: P>
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell : UITableViewCell? = tableView.dequeueReusableCellWithIdentifier("HelpCell") as? UITableViewCell if(cell == nil) { cell = UITableViewCell(style: .Default, reuseIdentifier: "HelpCell") } return cell! }
5 Réponses :
Dans iOS 8, attribuant le estimationrowheighight code> Une valeur tourne sur la nouvelle fonctionnalité de calcul automatique de la hauteur de la ligne de ligne 8 iOS 8. Cela signifie que la hauteur de la cellule est dérivée en utilisant ses contraintes internes de l'intérieur. S'il y a quelque chose qui ne va pas avec ces contraintes, vous obtiendrez des résultats étranges. Donc, il y a quelque chose qui ne va pas avec vos contraintes de cellule. Ils sont probablement ambiguës; C'est la raison habituelle de l'incohérence. Cependant, c'est tout ce que je peux vous dire, car vous n'avez pas réellement montré / décrit les contraintes. P>
Je suis sûr que mes contraintes ne sont pas ambiguës car je n'ai que 4 contraintes sur l'Uilabel. Avez-vous d'autres suggestions ce qui pourrait éventuellement être faux?
Ne soyez pas "à peu près sûr". Il existe des moyens de savoir que vous ayez une disposition ambiguë. Utilise les. N'utilisez pas votre sentiment de gut; C'est le problème, pas la solution. Si vous saviez I> Qu'est-ce qui constitue une mise en page sans ambiguïté, nous ne serions pas là avec vous avoir des problèmes, allons-nous? Écoutez ce que je vous dis. Le fait simple est que 4 contraintes d'épingle à gauche, à droite, en haut et en bas sont pas assez i>. Vos contraintes probablement sont i> ambiguë.
Je suggère de supprimer la contrainte inférieure sur le Si cela n'a pas résolu le problème, essayez d'ajouter les éléments suivants dans Uilabel code>. Il redimensionnera selon le texte et la cellule devrait également redimensionner. P>
ViewDidLoad () code>: p>
self.tableview.reloaddata () code> p>
Merci pour la suggestion, mais si je supprime la contrainte, l'Uilabel ne se résoudra pas. En outre, le rechargement des données ne résout pas le problème.
Pourriez-vous s'il vous plaît partager une capture d'écran de vos contraintes avec la cellule?
J'ai eu un problème où la hauteur des cellules n'était pas correcte sur la première charge, mais après le défilement de la hauteur des cellules de haut et de la hauteur des cellules.
J'ai essayé toutes les "corrections" différentes pour ce problème puis a finalement trouvé que l'appelant ces fonctions après avoir appelé initialement ne fait que ces appels supplémentaires après la charge initiale. P> J'ai trouvé cette information très utile ici: https://github.com/smileyborg/tableviewcellwitoutolayouios8/issues / 10 p> Voici un exemple de mise en oeuvre de self.tableview.reloaddata code>. p>
hauteurfinxrofortdexpath code>, puis renvoyer la hauteur de la cellule calculée. Découvrez ce lien pour un bon exemple de cela, http: //www.raywenderlich .COM / 73602 / DYNAMIQUE-TABLE-VIEW-CELL-Hauteur-Auto-Disposition , spécifiquement la pièce sur
HauteurFornorTIndexPath code>. P>
estiméheightfortindindexpath code> et fournir des estimations de hauteur de ligne quelque peu précises. Ceci est très utile si vous avez un
utableview code> avec des cellules pouvant être toutes sortes de hauteurs différentes. p>
estimationHeightfortindexPath code>: p>
UitablesViewAutomaticDimension Code> a été corrigée pour iOS 9 (woo-hoo!). Donc, vos cellules doivent em> se dimèrent automatiquement sans avoir à calculer la hauteur des cellules manuellement. P> p>
Ceci a fonctionné pour moi J'ai eu ceci d'ici >> http://askstop.com/questions/2572338/ittableview-Display-sparator-at-wrong-position-in-ios8-for- certaines cellules p> p>
Comme l'indique Apple dans la description de Cette méthode ne force pas une mise à jour immédiate, mais attend plutôt du cycle de mise à jour suivant, vous pouvez l'utiliser pour invalider la disposition de plusieurs vues avant que l'une de ces vues ne soit mise à jour. Ce comportement vous permet de consolider toutes vos mises à jour de mise à jour à un cycle de mise à jour, ce qui est généralement meilleur pour la performance. P>
blockQuote> Étant donné que vous devez ajouter des lignes de code nécessaires (qui doivent être exécutées avec la mise en page droite) dans exemple: p> SetNeedsLayout Code>:
Dispatch_After Block Code> (qui mettra votre méthode dans la file d'attente de Runloop). Et votre code sera exécuté après que la mise en page des besoins s'applique. P>