2010-03-26 6 views
5

Mon application dispose de cellules de table de hauteur variable. Les cellules peuvent également avoir un UIButton défini comme un bouton de divulgation de détail (rond, bleu avec flèche) comme vue accessoire.UITableViewLes cellules de différentes hauteurs placent leurs accessoires dans différentes positions X

En fonction de la hauteur de la cellule, la vue des accessoires est positionnée différemment. Au début, je pensais que c'était mon code de disposition pour ma cellule qui causait le problème, alors j'ai mis en place un test rapide indépendant qui utilise la vanille UITableCells pour éliminer la possibilité que cela puisse être de ma faute.

J'ai mis en place une vue dans le constructeur d'interface, et juste ajouté des cellules de table de vue à la vue, définissez leurs hauteurs à différentes valeurs, puis ajouté un bouton de divulgation de détail à chacun. Ni plus ni moins.

Voici ce que je vois:

UITableViewCells with different x values http://jasarien.com/jing/accessoryView_x_difference.png

J'ai ajouté les guides de taille (grâce à Xscope) donc vous pouvez voir la différence dans la vue accessoire positions x.

Les hauteurs sont:

  • top 37px
  • mi 68px
  • 44px bas (par défaut, la hauteur intacte)

Si j'augmente la hauteur toute heigher que 68px vue accessoire ne bouge plus à gauche.

Est-ce un bug? Est-ce que je peux empêcher cela de se produire?

Voici le projet de test à reproduire.

TableViewCellHeightsTest.zip

+0

Je ne suis pas en mesure de reproduire cela dans iPhone SDK 3.0. Fonctionne bien ici. Pourriez-vous télécharger le projet de test indépendant, afin que je puisse le télécharger et le tester? –

+0

J'ai ajouté un lien dans la question. – Jasarien

Répondre

2

j'ai eu le même problème quand je téléchargé votre fichier. Au lieu de fixer les boutons d'information de détail manuellement et de les affecter aux cellules comme points de vente, supprimer tous les indicateurs de divulgation et essayer de les mettre ainsi à la place:

alt text http://i44.tinypic.com/35hjq5y.png

+0

Oui, j'ai remarqué qu'après avoir dit que vous ne voyiez pas le problème. Cependant, dans mon code, les boutons de divulgation sont créés par programmation et définis comme vue accessoire de la cellule, donc j'essayais de répliquer cela dans le constructeur d'interface. Je suppose que j'ai négligé la simplicité de simplement définir le type d'accessoire de la cellule à la divulgation détaillée, puis de définir son action ... – Jasarien

+0

Ceci est un problème très frustrant. J'ai le même problème, en paramétrant tout mon code de cellule par programme, et en obtenant des positions différentes pour les indicateurs basés sur la hauteur de la cellule. –

2

Note: Je mets la couleur d'arrière-plan de l'affichage du contenu en bleu pour la facilité de vue.

enter image description here

Figure 1 (hauteur de vue accessoire est 17,0)

Je faisais face à ce problème et avait le luxe de 2 collègues me aider à comprendre la cause. Nous constatons que lors de l'utilisation par défaut UITableViewCell (Dans mon cas, de style UITableViewCellStyleDefault si je crois que cela s'applique à tous les autres styles), si la hauteur de votre vue accessoire est quelque chose au-dessus du nombre magique 16,0, la position x de la vue accessoire commencent à différer avec la variance de la hauteur de la cellule.

enter image description here

Figure 2 (hauteur de vue accessoire est 16,0)

Mon collègue avait mis en œuvre une coutume UITableViewCell et l'utilisation des sous-vues à la mise en page du contenu et a été en mesure d'éviter ce problème.

Vous avez 3 options:

  • Restreindre la hauteur de votre point de vue accessoire à 16,0 et au-dessous.
  • Utilisez un UITableViewCell personnalisé et mettez en page votre propre contenu sous forme de sous-vues.
  • Utilisez le type d'accessoire par défaut.

enter image description here

Figure 3 (type accessoire par défaut UITableViewCellAccessoryDetailDisclosureButton)

1

Je faisais la même question et le fixe en faisant l'accessoire personnalisé voir la même hauteur que la cellule.

+0

Facilement la meilleure réponse! Merci! – uvesten

Questions connexes