8
votes

iOS 8 utablementview première ligne a une hauteur incorrecte

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!
}


0 commentaires

5 Réponses :


0
votes

Dans iOS 8, attribuant le estimationrowheighight 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.


2 commentaires

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 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 . Vos contraintes probablement sont ambiguë.



0
votes

Je suggère de supprimer la contrainte inférieure sur le Uilabel . Il redimensionnera selon le texte et la cellule devrait également redimensionner.

Si cela n'a pas résolu le problème, essayez d'ajouter les éléments suivants dans ViewDidLoad () :

self.tableview.reloaddata ()


2 commentaires

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?



18
votes

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 self.tableview.reloaddata . xxx

ne fait que ces appels supplémentaires après la charge initiale.

J'ai trouvé cette information très utile ici: https://github.com/smileyborg/tableviewcellwitoutolayouios8/issues / 10

mise à jour: Parfois, vous devrez peut-être également configurer complètement votre cellule dans hauteurfinxrofortdexpath , 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 .

Mise à jour 2: < / STRUT> J'ai aussi trouvé cela très bénéfique pour remplacer estiméheightfortindindexpath et fournir des estimations de hauteur de ligne quelque peu précises. Ceci est très utile si vous avez un utableview avec des cellules pouvant être toutes sortes de hauteurs différentes.

Voici un exemple de mise en oeuvre de estimationHeightfortindexPath : xxx

Mise à jour 3: UitablesViewAutomaticDimension a été corrigée pour iOS 9 (woo-hoo!). Donc, vos cellules doivent se dimèrent automatiquement sans avoir à calculer la hauteur des cellules manuellement.


0 commentaires


3
votes

Comme l'indique Apple dans la description de SetNeedsLayout :

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.

É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 Dispatch_After Block (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.

exemple: xxx


0 commentaires