UIImageView dans mon UITableViewCell des changements de taille de sur cliquez sur
J'ai un assez vanille UITableView dans mon application permet d'afficher une image et du texte dans le répertoire par défaut/de façon standard. La première fois qu'un UITableViewCell est demandé-je le retourner avec un espace réservé d'image et de commencer un téléchargement asynchrone de l'image réelle. Lorsque le téléchargement est terminé, je remplacez l'espace réservé d'image.
Si un téléchargement échoue, l'espace réservé à l'image du reste. En cliquant sur une telle ligne des actes normalement. Si le téléchargement est réussi, en cliquant sur une ligne avec l'image qui mène à la UIImageView de s'étendre à la hauteur de la ligne (et la largeur augmente à l'échelle). Le UIImageView ne revient jamais à sa taille normale. Brut tente de définir le cadre de la UIImageView ne résout pas la question de la mystérieuse redimensionnement.
//from my - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; method
//after boilerplate cell dequeuing code
cell.textLabel.text = [selectedNoun title];
//add placeholder image
UIImage *placeholderImage = [UIImage imageNamed:@"placeholder.png"];
cell.imageView.image = placeholderImage;
[cell.imageView setContentMode:UIViewContentModeScaleAspectFit];
//...
//If the image has been downloaded I set it
cell.imageView.image = iconDownloader.image;
C'est me rend fou. Il en fait ne se produit que dans l'une des deux tables dans mon application, mais après les avoir comparées ligne ou ligne je ne peux pas voir la différence. En espérant que quelqu'un a rencontré ce avant.
Merci!
EDIT: je n'ai pas une bonne explication pour mon autre solution que de dire que les images au-dessus d'une certaine taille, semblent conduire à ce que le comportement et l'utilisation effective des vignettes (même des images un peu plus gros que le UIImageView de l'image) ne présentent pas ce comportement.
- Si vous avez personnalisé UITableViewCell alors assurez-vous que votre UIImageView n'est pas nommé avec "imageView"
Vous devez vous connecter pour publier un commentaire.
Si vous avez personnalisé UITableViewCell alors assurez-vous que votre UIImageView n'est pas nommé avec "imageView"
Les seules choses qui me viennent à l'esprit que l'effet de la taille & apparition d'une vue à l'intérieur de ses superview sont:
Êtes-vous en changeant l'image/limites/centre de propriétés de n'importe où? Où/comment est le cadre fixé au départ?
imageView.autoResizingMask
doit être réglé àUIViewAutoResizingNone
imageView.clipsToBounds
doit être réglé àYES
EDIT: plus de suggestions
Je suis prise de vue dans l'obscurité b/c votre affiché le code a l'air bien et si vous avez défini
imageView.clipsToBounds
qui doivent contraindre l'image tracée à laimageView
cadre. Voici un couple de choses à essayer:Mettre en œuvre
tableView:willDisplayCell:forRowAtIndexPath:
et définir laimageView
propriétés là-bas. SiimageView.frame
est le problème, ce ne sera probablement pas le corriger.Ajouter votre propre
UIImageView
à la cellule configuré comme vous le souhaitez et ne pas utiliser le construit enimageView
de la propriété. Si le comportement de la cellule par défaut est à l'origine du problème, cela devrait fonctionner.EDIT: gros problèmes d'image
Je ne sais pas exactement comment grand le "vraiment de grandes images" que vous utilisez actuellement, mais ils sont probablement la question. À partir de la
UIImage
docs (l'emphase est mienne):contentMode
pour s'adapter dans les limites de laimageView
et que vous avez définiclipToBounds
pour s'assurer que leimageView
de ne pas dessiner quoi que ce soit à l'extérieur, il est des limites, peu importe. Si vous utilisez une cellule standard (vs personnalisé), puis leimageView
cadre est configuré pour vous. Vous pouvez poster plus de code montrant la cellule d'instanciation/configuration ainsi que l'image téléchargée gestionnaire. Il pourrait aussi être quelque chose dans untableView
délégué de la méthode. En aparté, si les images téléchargées sont très grandes, vous devriez probablement mettre à l'échelle pour l'affichage afin de préserver les ressources.imageView
pour mémoire raisons.Cette réponse m'a aidé. Mais j'ai dû assurez-vous d'appeler
[cell layoutSubviews]
dans la méthode qui fonctionne le paramètre, comme ceci:J'espère que cela peut vous être utile!
Mon problème est légèrement différent, j'ai eu une coutume
UITableViewCell
avec UIImageView et lorsque la cellule disparu et réapparu, l'image serait une mauvaise taille. Mon problème est que j'ai été la misecell.imageView
en un seul endroit etcell.thumbnail
(image personnalisée) dans un autre, alors j'ai changé toutes les références àcell.thumbnail.
Espérons que cela aide quelqu'un dans l'avenir avec un problème similaire.
UIImageView
dans une cellule n'a pas été nomméimageView
(nommé àphotoView
) correction du problème. Je devine que la normeimageView
est chargé dynamiquement et ajouté en tant que sous-vue une fois que vous accéder à la propriété..Dans ces situations-je utiliser cette Image loader cadre. Il comprend une méthode pour définir un espace réservé à l'image de votre choix, pendant le téléchargement des images en arrière-plan, et comme un avantage supplémentaire, il met en cache les images en garantissant la même image ne jamais avoir à être téléchargés à deux reprises. C'est un grand morceau de travail que j'ai trouvé très utile pour tableview chargement de l'image.
SDWebImage:
https://github.com/rs/SDWebImage
J'ai eu le même problème et je n'arrive pas à comprendre la raison de cela. De toute façon, c'est quelque chose lié à l'espace réservé d'image: si vous chargez une image de la même taille que l'espace réservé, pas de redimensionnement sera effectuée, mais si les tailles ne correspondent pas, le chargement de l'image sera redimensionnée à l'espace réservé dimensions, et redimensionnée lorsque l'utilisateur clique dessus.
Donc, si vous voulez éviter ce problème, utilisez un espace réservé qui correspond à la hauteur d'une ligne.
suivez ces étapes:
C'est assez peu probable, mais vous devriez essayer de regarder ce qui se passe pour les cadres de la UITableViewCell de sous-vues lors de ses
isSelected
propriété commutateurs deNO
àYES
(I. e. ce qui se passe lorsque vous appuyez sur une cellule). Je doute que va aider beaucoup, mais il est utile dans la recherche (si vous pouvez trouver quelque chose...c'est tous sous le capot de UITableViewCell j'imagine).Vous devriez également regarder dans le imageview est
clipsToBounds
de la propriété. Peut être que cela a quelque chose à faire avec elle?de faire quelque chose comme
lors de la configuration de l'image de résoudre le problème pour moi
Si vous rechargez la tableview quand il la fin du chargement, l'image de la taille qu'il était supposé avoir