Tengo una imagen grande en Assets.xcassets. ¿Cómo cambiar el tamaño de esta imagen con SwiftUI para hacerla pequeña?
Intenté establecer el marco pero no funciona:
Image(room.thumbnailImage)
.frame(width: 32.0, height: 32.0)
Debe usar .resizable()
antes de aplicar cualquier modificación de tamaño en un Image
.
Image(room.thumbnailImage).resizable()
.frame(width: 32.0, height: 32.0)
aspectRatio(_:contentMode:)
Image("name").resizable().scaledToFit()
sin embargo, no tiene micrófonos. Para que pueda envolver su imagen en una vista, ajustar el marco de la vista al tamaño que necesite, luegoscaledToFit()
hará que la imagen sea lo más grande posible manteniendo la relación de aspecto.Qué tal esto:
struct ResizedImage: View { var body: some View { Image("myImage") .resizable() .scaledToFit() .frame(width: 200.0,height:200) } }
la vista de la imagen es de 200x200, pero la imagen mantiene la relación de aspecto original (cambio de escala dentro de ese marco)
fuente
Image(uiImage: image!).resizable().aspectRatio(image!.size, contentMode: .fill)
dondeimage
es de tipoUIImage
porque elImage
tipo no expone ninguna propiedad de tamaño.Ampliando la respuesta y los comentarios de @ rraphael:
A partir de Xcode 11 beta 2, puede escalar una imagen a dimensiones arbitrarias, mientras mantiene la relación de aspecto original envolviendo la imagen en otro elemento.
p.ej
struct FittedImage: View { let imageName: String let width: CGFloat let height: CGFloat var body: some View { VStack { Image(systemName: imageName) .resizable() .aspectRatio(1, contentMode: .fit) } .frame(width: width, height: height) } } struct FittedImagesView: View { private let _name = "checkmark" var body: some View { VStack { FittedImage(imageName: _name, width: 50, height: 50) .background(Color.yellow) FittedImage(imageName: _name, width: 100, height: 50) .background(Color.yellow) FittedImage(imageName: _name, width: 50, height: 100) .background(Color.yellow) FittedImage(imageName: _name, width: 100, height: 100) .background(Color.yellow) } } }
Resultados
(Por alguna razón, la imagen se muestra un poco borrosa. Tenga la seguridad de que la salida real es nítida).
fuente
.aspectRatio(1, ...
. Por no decir que ninguna otra solución aquí me ha funcionado hasta ahora ...En SwiftUI, use el
.resizable()
método para cambiar el tamaño de una imagen. Al usar.aspectRatio()
y especificar aContentMode
, puede "Ajustar" o "Rellenar" la imagen, según corresponda.Por ejemplo, aquí hay un código que cambia el tamaño de la imagen ajustando:
Image("example-image") .resizable() .aspectRatio(contentMode: .fit)
fuente
struct AvatarImage: View { var body: some View { Image("myImage") .resizable() .scaledToFill() // <=== Saves aspect ratio .frame(width: 60.0, height:60) .clipShape(Circle()) } }
fuente
VStack(alignment: .leading, spacing: 1) { //Image Logo Start Image("img_Logo") .resizable() .padding(.all, 10.0) .frame(width: UIScreen.main.bounds.width * 0.4, height: UIScreen.main.bounds.height * 0.2) //Image Logo Done }
fuente
Si desea usar la relación de aspecto con el cambio de tamaño, puede usar el siguiente código:
Image(landmark.imageName).resizable() .frame(width: 56.0, height: 56.0) .aspectRatio(CGSize(width:50, height: 50), contentMode: .fit)
fuente
Dado que no deberíamos codificar / corregir el tamaño de la imagen. Esta es una mejor manera de proporcionar rango para ajustar de acuerdo con la resolución de la pantalla en diferentes dispositivos.
Image("ImageName Here") .resizable() .frame(minWidth: 60.0, idealWidth: 75.0, maxWidth: 95.0, minHeight: 80.0, idealHeight: 95.0, maxHeight: 110.0, alignment: .center) .scaledToFit() .clipShape(Capsule()) .shadow(color: Color.black.opacity(5.0), radius: 5, x: 5, y: 5)
fuente
Otro enfoque es usar el
scaleEffect
modificador:Image(room.thumbnailImage) .resizable() .scaleEffect(0.5)
fuente
Si desea cambiar el tamaño de la imagen en swiftUI, simplemente use el siguiente código:
import SwiftUI struct ImageViewer : View{ var body : some View { Image("Ssss") .resizable() .frame(width:50,height:50) } }
Pero aquí hay un problema con esto. Si agrega esta imagen dentro de un botón, la imagen no se mostrará, solo un bloque de color azul estaría allí. Para resolver este problema, simplemente haga esto:
import SwiftUI struct ImageViewer : View{ var body : some View { Button(action:{}){ Image("Ssss") .renderingMode(.original) .resizable() .frame(width:50,height:50) } } }
fuente
Bueno, parece bastante fácil en SwiftUI / Siguiendo la demostración que dieron: https://developer.apple.com/videos/play/wwdc2019/204
struct RoomDetail: View { let room: Room var body: some View { Image(room.imageName) .resizable() .aspectRatio(contentMode: .fit) }
Espero eso ayude.
fuente
Puede definir las propiedades de la imagen de la siguiente manera: -
Image("\(Image Name)") .resizable() // Let you resize the images .frame(width: 20, height: 20) // define frame size as required .background(RoundedRectangle(cornerRadius: 12) // Set round corners .foregroundColor(Color("darkGreen")) // define foreground colour
fuente
Es muy importante comprender la estructura lógica del código. Como en SwiftUI, una imagen no se puede cambiar de tamaño de forma predeterminada. Por lo tanto, para cambiar el tamaño de cualquier imagen, debe cambiar su tamaño aplicando el modificador .resizable () inmediatamente después de declarar una vista de imagen.
Image("An Image file name") .resizable()
fuente
De forma predeterminada, las vistas de imágenes se ajustan automáticamente a su contenido, lo que puede hacer que vayan más allá de la pantalla. Si agrega el modificador resizable (), la imagen se dimensionará automáticamente para que ocupe todo el espacio disponible:
Image("example-image") .resizable()
Sin embargo, eso también puede hacer que la imagen tenga su relación de aspecto original distorsionada, ya que se estirará en todas las dimensiones en la cantidad necesaria para llenar el espacio.
Si desea mantener su relación de aspecto, debe agregar un modificador de relación de aspecto usando .fill o .fit, como este:
Image("example-image") .resizable() .aspectRatio(contentMode: .fit)
fuente