J'ai une grande image dans Assets.xcassets. Comment redimensionner cette image avec SwiftUI pour la rendre petite ?
J'ai essayé de définir le cadre mais cela ne fonctionne pas :
Image(room.thumbnailImage)
.frame(width: 32.0, height: 32.0)
J'ai une grande image dans Assets.xcassets. Comment redimensionner cette image avec SwiftUI pour la rendre petite ?
J'ai essayé de définir le cadre mais cela ne fonctionne pas :
Image(room.thumbnailImage)
.frame(width: 32.0, height: 32.0)
Cette méthode nécessite que vous spécifiez le rapport d'aspect. Je voudrais conserver le rapport d'aspect original de l'image mais le restreindre pour qu'il s'adapte au mieux à la hauteur du cadre, en centrant le contenu de l'image et en recadrant par le cadre.
Le rapport d'aspect original est de 3/2 et le résultat devient de 1/1 ce qui étire l'image. Il semble que ce soit un bug de SwiftUI. J'ai fini par utiliser la méthode suggérée par Mark Kang dans les commentaires sous la réponse acceptée, Image(uiImage: image!).resizable().aspectRatio(image!.size, contentMode: .fill)
où image
est de type UIImage
car le type Image
n'expose aucune propriété de taille.
En SwiftUI, utilisez la méthode .redimensionnable()
pour redimensionner une image. En utilisant .aspectRatio()
et en spécifiant un ContentMode
, vous pouvez soit "Adapter" soit "Remplir" l'image, selon le cas.
Par exemple, voici le code qui redimensionne l'image en l'adaptant :
Image("exemple-image")
.redimensionnable()
.aspectRatio(contentMode: .fit)
Élargir la réponse et les commentaires de @rraphael :
À partir de Xcode 11 beta 2, vous pouvez redimensionner une image aux dimensions souhaitées tout en conservant le ratio d'aspect d'origine en enveloppant l'image dans un autre élément.
par exemple
struct FittedImage: View
{
let nomImage: String
let largeur: CGFloat
let hauteur: CGFloat
var body: some View {
VStack {
Image(systemName: nomImage)
.resizable()
.aspectRatio(1, contentMode: .fit)
}
.frame(width: largeur, height: hauteur)
}
}
struct FittedImagesView: View
{
private let _nom = "checkmark"
var body: some View {
VStack {
FittedImage(nomImage: _nom, largeur: 50, hauteur: 50)
.background(Color.yellow)
FittedImage(nomImage: _nom, largeur: 100, hauteur: 50)
.background(Color.yellow)
FittedImage(nomImage: _nom, largeur: 50, hauteur: 100)
.background(Color.yellow)
FittedImage(nomImage: _nom, largeur: 100, hauteur: 100)
.background(Color.yellow)
}
}
}
Résultats
(Pour une raison quelconque, l'image apparaît un peu floue. Soyez assuré que la sortie réelle est nette.)
Vous voyez probablement une image floue sur SO parce que vous utilisez un moniteur haute résolution. Je l'ai affiché sur un moniteur à résolution normale et elle est nette.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.