UIImageView avec Aspect de Remplissage à l'intérieur de la coutume UITableViewCell à l'aide de mise en page automatique
J'ai eu du mal avec la pose d'un UIImageView
qui montre des images de la variable largeurs et hauteurs avec Aspect Fill
. La hauteur de la cellule n'est pas adapter à la nouvelle hauteur de la UIImageView
et persister de hauteur.
La hiérarchie des vues est ce
- UITableViewCell
- UITableViewCell.ContentView
- UIImageView
- UITableViewCell.ContentView
J'ai essayé ces scénarios dans XCode Mise en page Automatique :
- définir la
UIImageView => Height
àremove at build time
- définir la
Intrinsic Value
de laUIImageView
àplaceholder
- définir la
Intrinsic Value
pour chacun desUIImageView
,ContentView
etUITableViewCell
àplaceholder
Avec l'une de ces combinaisons-je obtenir ce point de vue:
http://i.stack.imgur.com/Cw7hS.png
Les lignes bleues représentent la cellule frontières (limites) et les verts représentent les UIImageView
frontières (limites). Il y a quatre cellules dans cet exemple, le 1er et le 3e ont pas d'images et le 2e et le 4e, il y a la même image (débordement de cours de ceux qui n'en ont aucun).
- Pourquoi ne pas utiliser
.ScaleToFill
au lieu d'un calculer quelle est la largeur et la hauteur des images, vous avez à mettre dans la cellule de s'attendre à un meilleur résultat? .ScaleToFill
de ne pas garder le ratio d'aspect des images. Prenons le cas si j'ai une image avec une égale hauteur et la largeur (carré) et qui veulent s'adapter à l'intérieur de laUIImageView
il va s'étirer, je crois.- Oui, vous avez raison, mais si on calcule les proportions de la largeur sur la taille de l'image d'origine, vous pouvez définir la largeur de l'image en plus de la cellule et de l'image à conserver son aspect.
- Disons que j'ai fait, comment la cellule va ajuster sa hauteur avec égard à la hauteur de son contenu, en particulier les
UIImageView
. envisager un scénario où une image est prise par un appareil photo de téléphone en mode portrait et la hauteur est plus grand que la largeur de l'image. - Voir mise à jour de réponse. Je l'espère, peut vous aider à
Vous devez vous connecter pour publier un commentaire.
J'ai bricolé une solution basée sur deux réponses précédentes:
Je voulais garder la
AspectRatio
de l'image quelle que soit saHeight
lors de la fixation de laWidth
selon l'UIImageView
, le conteneur de l'image.La solution est composée de :
L'ajout d'un nouveau
AspectRatio
contraintelors de l'ajout de cette contrainte, xCode va se plaindre à propos de la nouvelle "redondant" la contrainte, et de tenter de le casser, de le rendre inutile, mais l'affichage de l'image exactement comme je veux. Cela m'amène à la deuxième solution
Diminuer la priorité de la nouvelle contraindre à " 999 " semble arrêter xcode de la violer, et il a cessé de montrant message d'avertissement à propos de la nouvelle contrainte
aspectConstraint?.priority = 999
Ne sais pas pourquoi xCode ajoute automatiquement
UIView-Encapsulated-Layout-Height
etUIView-Encapsulated-Layout-Height
lors de la compilation/exécution; toutefois, j'ai appris à respecter et à vivre avec elle 🙂En laissant la solution ici pour quiconque de vérifier. C'est en travaillant sur iOS 8. J'ai essayé avec iOS7, mais il ne fonctionne pas de la même chose que vous avez besoin pour mettre en œuvre
tableView:heightForRowAtIndexPath
le calcul de la hauteur de la cellule de base sur tous les éléments qu'elle contient, et de désactiver la mise en place:Supposons que vous avez un
UIImage
avec des dimensions de 768 x 592 dewidth
etheight
respectivement, la hauteur reste toujours égal à égal, où le dispositif de rotation par exemple dans les dimensions ci-dessus (l'iPad), lewidth
du changement d'image de 1024 et leheight
reste égal.Ce que vous pouvez faire pour maintenir l'aspect de l'image de l'échelle dans les dimensions que vous souhaitez, par exemple si vous savez que les images provenant de toujours avoir les mêmes dimensions, nous disons, par exemple, 1280x740 , vous pouvez définir la
UIImage
à.ScaleToFill
et calculer de la manière suivante:Par exemple :
Et c'est le
width
je dois mettre dans monUIImage
pour conserver les proportions de l'image lorsque c'est changer la largeur.J'espère que vous comprenez où j'essaie de vous dire.
UIImage
dans leUIImageView
, droit? Le problème que j'ai est vraiment pas avec leUIImageView
mais vraiment avec l'englobant de la cellule. Je n'ai qu'un mode portrait pour les iPhone et la largeur est toujours fixe. Ainsi, la hauteur de la cellule est ce qui reste fixe malgré le changement de la hauteur de laUIImageView
quand je l'ajustement de l'image. Vous ne savez pas si nous sommes sur la même page ici.Lors de l'ajout de l'aspect de contrainte, Xcode va se plaindre à propos de la nouvelle "redondant" la contrainte, et de tenter de le briser. Cochez simplement la case "supprimer au moment de la construction" de l'aspect de contrainte.