Le positionnement de l'imageView de UITableViewCell
Dans tous les UITableViewCell d'un UITableView je place une image dans son imageView. Cependant, si j'augmente la hauteur d'une cellule à l'aide de tableView:heightForRowAtIndexPath: pour accueillir plus de texte, j'ai trouvé que:
- L'image est aligné au centre verticalement.
- La marge gauche de l'image augmente. Cela pousse le texte à droite de sorte que sa marge de gauche n'est plus aligné avec le texte dans les cellules au-dessus et au-dessous.
J'aimerais que l'image soit alignée en haut à la verticale, de sorte qu'il est dans le coin supérieur gauche de la cellule (comme la première cellule dans l'image ci-dessous) et ne pas avoir sa gauche, l'accroissement de la marge (de sorte que la marge à gauche du texte dans la deuxième cellule concorde avec le texte dans la première cellule).
Modifier le cadre, centre, etc ... de l'imageView semble avoir aucun effet. Des idées? Merci...
(J'ai une image du problème, mais ne me permet pas de poster une image encore parce que je suis un noob avec moins de 10 réputation. Grrr...)
OriginalL'auteur user511132 | 2010-11-17
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'une classe de UITableViewCell et remplacer layoutSubviews, comme suit:
Dans votre cellForRowAtIndexPath: méthode, assurez-vous de retourner une instance de votre nouveau type de cellule.
Cela ne fonctionne pas car la superclasse de la mise en page dans la mise en œuvre de layoutSubviews. En appelant [super layoutSubviews] le superclas sera la position de la imaveView et toutes les autres étiquettes/des icônes, et vous pouvez alors repositionner.
Il pourrait aider à comprendre qu'un UITableViewCell est juste une UIView, qui gère aussi & les positions de ces sous-vue des étiquettes et des images pour vous "gratuitement". Vous pouvez facilement prendre des cours de dessin de l'ensemble de la cellule et de faire ce que vous voulez (par exemple, rebondir une balle). À un certain point dans la personnalisation de la courbe, c'est juste ce que vous devriez faire. Le genre de sous-classement Tom suggère une petite marche le long de ce chemin.
OriginalL'auteur TomSwift
Le moment où vous pensez que vous avez besoin d'ajuster les tailles ou les positions des éléments dans les styles par défaut, est le temps que vous avez besoin de réfléchir à la création d'une cellule personnalisé avec vos propres éléments taille et la position de la façon dont vous le souhaitez. C'est pourquoi vous pouvez créer des cellules. 🙂
Rivera: Vous devriez?
OriginalL'auteur jer
D'une autre façon (fonctionne sous iOS 6) est de créer une UIImageView et l'ajouter à la cellule comme une sous-vue
UITableViewCell
directement. Au lieu de cela, placez-les souscontentView
objet. C'est comment la cellule classe est conçue. (voir la documentation d'Apple) Si vous placez vue directement sur la cellule, il peut provoquer résultat inattendu.OriginalL'auteur Pach
Vraiment une fonction utile vous pourriez ne pas avoir essayé (en
UITableViewDelegate
) esttableView:willDisplayCell:forRowAtIndexPath:
. Il est appelé juste avant d'une cellule est affichée et son but est de vous permettre de faire les choses à la mise en page sans l'OS en le modifiant de nouveau avant l'affichage. Effectivement vous avez le contrôle total. Je l'ai utilisé pour changer les polices dans les cellules, mais vous pouvez effectuer une itération de la cellule sous-vues et de modifier leurs images trop.Encore je suis d'accord vous êtes au point où il est temps de regarder dans des cellules et cesser de combattre l'OS. Il n'est pas difficile à faire et Apple donne un bon exemple dans La Vue de la Table Guide de Programmation pour iOS.
cell.imageView.frame = CGRectMake( 10, 10, 50, 50 );
. Avez-vous peut-être avoir une idée de la raison?Il ne fonctionne pas sous iOS 6
OriginalL'auteur Adam Eberbach
Vous pouvez créer une cellule personnalisé et placer les objets où vous en avez besoin pour être aussi bien que le réglage de l'auto de valeurs de masque.
OriginalL'auteur WrightsCS
Swift 4 variation de TomSwift de la solution (qui a travaillé pour moi gentiment):
OriginalL'auteur Antonín Karásek