Tenho uma imagem grande em Assets.xcassets. Como redimensionar esta imagem com SwiftUI para torná-la pequena?
Tentei definir o quadro, mas não funcionou:
Image(room.thumbnailImage)
.frame(width: 32.0, height: 32.0)
Você deve usar .resizable()
antes de aplicar qualquer modificação de tamanho em um Image
.
Image(room.thumbnailImage)
.resizable()
.frame(width: 32.0, height: 32.0)
aspectRatio(_:contentMode:)
Image("name").resizable().scaledToFit()
não está grampeado, no entanto. Assim, você pode embrulhar sua imagem em uma visualização, ajustar o quadro da visualização para qualquer tamanho que você precisar e, em seguidascaledToFit()
, tornar a imagem o maior possível, mantendo a proporção de aspecto.Que tal agora:
struct ResizedImage: View { var body: some View { Image("myImage") .resizable() .scaledToFit() .frame(width: 200.0,height:200) } }
a visualização da imagem é de 200x200, mas a imagem mantém a proporção original (redimensionando dentro desse quadro)
fonte
Image(uiImage: image!).resizable().aspectRatio(image!.size, contentMode: .fill)
ondeimage
é do tipoUIImage
porque oImage
tipo não expõe nenhuma propriedade de tamanho.Expandindo a resposta e comentários de @rraphael:
A partir do Xcode 11 beta 2, você pode dimensionar uma imagem em dimensões arbitrárias, enquanto mantém a proporção original, envolvendo a imagem em outro elemento.
por exemplo
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 algum motivo, a imagem está um pouco desfocada. Tenha certeza de que a saída real é nítida.)
fonte
.aspectRatio(1, ...
. Para não dizer que qualquer outra solução aqui funcionou para mim até agora ...No SwiftUI, use o
.resizable()
método para redimensionar uma imagem. Usando.aspectRatio()
e especificando umContentMode
, você pode "Ajustar" ou "Preencher" a imagem, conforme apropriado.Por exemplo, aqui está o código que redimensiona a imagem ajustando:
Image("example-image") .resizable() .aspectRatio(contentMode: .fit)
fonte
Bem, parece muito fácil em SwiftUI / Seguindo a demonstração que eles deram: 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 que ajude.
fonte
struct AvatarImage: View { var body: some View { Image("myImage") .resizable() .scaledToFill() // <=== Saves aspect ratio .frame(width: 60.0, height:60) .clipShape(Circle()) } }
fonte
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 }
fonte
Outra abordagem é usar o
scaleEffect
modificador:Image(room.thumbnailImage) .resizable() .scaleEffect(0.5)
fonte
Se quiser usar a proporção com redimensionamento, você pode usar o seguinte código:
Image(landmark.imageName).resizable() .frame(width: 56.0, height: 56.0) .aspectRatio(CGSize(width:50, height: 50), contentMode: .fit)
fonte
Uma vez que não devemos codificar / corrigir o tamanho da imagem. Esta é a melhor maneira de fornecer intervalo para ajustar de acordo com a resolução da tela em 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)
fonte
Por padrão, as visualizações de imagens se dimensionam automaticamente de acordo com seu conteúdo, o que pode fazer com que elas ultrapassem a tela. Se você adicionar o modificador resizable (), a imagem será dimensionada automaticamente para preencher todo o espaço disponível:
Image("example-image") .resizable()
No entanto, isso também pode fazer com que a imagem tenha sua proporção original distorcida, porque ela será esticada em todas as dimensões pelo valor necessário para fazê-la preencher o espaço.
Se quiser manter sua proporção, você deve adicionar um modificador aspectRatio usando .fill ou .fit, como este:
Image("example-image") .resizable() .aspectRatio(contentMode: .fit)
fonte
Se você quiser redimensionar a imagem em swiftUI, basta usar o seguinte código:
import SwiftUI struct ImageViewer : View{ var body : some View { Image("Ssss") .resizable() .frame(width:50,height:50) } }
Mas aqui está o problema com isso. Se você adicionar esta imagem dentro de um botão, a imagem não será mostrada, apenas um bloco de cor azul estaria lá. Para resolver esse problema, basta fazer o seguinte:
import SwiftUI struct ImageViewer : View{ var body : some View { Button(action:{}){ Image("Ssss") .renderingMode(.original) .resizable() .frame(width:50,height:50) } } }
fonte
Você pode definir as propriedades da imagem como segue: -
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
fonte
É muito importante entender a estrutura lógica do código. Como no SwiftUI, uma imagem não é redimensionável por padrão. Portanto, para redimensionar qualquer imagem, você deve torná-la redimensionável aplicando o modificador .resizable () imediatamente após declarar uma visualização de imagem.
Image("An Image file name") .resizable()
fonte