Assets.xcassets'te büyük bir resmim var. Bu resmi SwiftUI ile küçültmek için nasıl yeniden boyutlandırabilirim?
Çerçeve ayarlamaya çalıştım ama işe yaramıyor:
Image(room.thumbnailImage)
.frame(width: 32.0, height: 32.0)
Yanıtlar:
.resizable()
Herhangi bir boyut değişikliği uygulamadan önce kullanmalısınız Image
.
Image(room.thumbnailImage).resizable()
.frame(width: 32.0, height: 32.0)
aspectRatio(_:contentMode:)
Image("name").resizable().scaledToFit()
yine de dinleniyor değil. Böylece görüntünüzü bir görünüme sarabilir, görünümün çerçevesini ihtiyacınız olan boyuta ayarlayabilir, ardından scaledToFit()
en boy oranını korurken görüntüyü olabildiğince büyük hale getirebilirsiniz.
Buna ne dersin:
struct ResizedImage: View {
var body: some View {
Image("myImage")
.resizable()
.scaledToFit()
.frame(width: 200.0,height:200)
}
}
resim görünümü 200x200'dür, ancak resim orijinal en boy oranını korur (bu çerçeve içinde yeniden ölçeklendirme)
Image(uiImage: image!).resizable().aspectRatio(image!.size, contentMode: .fill)
burada image
tür, UIImage
çünkü Image
tür herhangi bir boyut özelliği göstermez.
@ Rraphael'in cevabını ve yorumlarını genişletmek:
Xcode 11 beta 2'den itibaren, görüntüyü başka bir öğeye sararak orijinal en boy oranını korurken bir görüntüyü rastgele boyutlara ölçekleyebilirsiniz.
Örneğin
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)
}
}
}
Sonuçlar
(Bazı nedenlerden dolayı, görüntü biraz bulanık görünüyor. Gerçek çıktının keskin olduğundan emin olabilirsiniz.)
.aspectRatio(1, ...
. Şimdiye kadar buradaki başka bir çözümün benim için işe yaradığını
SwiftUI'de, .resizable()
bir görüntüyü yeniden boyutlandırmak için yöntemi kullanın. A kullanarak .aspectRatio()
ve belirterek ContentMode
, resmi uygun şekilde "Sığdır" veya "Doldur" yapabilirsiniz.
Örneğin, buraya sığdırarak resmi yeniden boyutlandıran kod:
Image("example-image")
.resizable()
.aspectRatio(contentMode: .fit)
Not: Resmimin adı
img_Logo
ve resim adını değiştirebilirsiniz, resim özelliklerini şu şekilde tanımlayın:
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
}
Yeniden boyutlandırmayla en boy oranını kullanmak istiyorsanız, aşağıdaki kodu kullanabilirsiniz:
Image(landmark.imageName).resizable()
.frame(width: 56.0, height: 56.0)
.aspectRatio(CGSize(width:50, height: 50), contentMode: .fit)
Görüntü boyutunu sabit kodlamamalı / düzeltmemeliyiz. Farklı cihazlarda ekranın çözünürlüğüne göre ayarlamak için aralık sağlamanın daha iyi bir yolu.
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)
Diğer bir yaklaşım, değiştiriciyi kullanmaktır scaleEffect
:
Image(room.thumbnailImage)
.resizable()
.scaleEffect(0.5)
Görüntüyü swiftUI'de yeniden boyutlandırmak isterseniz aşağıdaki kodu kullanın:
import SwiftUI
struct ImageViewer : View{
var body : some View {
Image("Ssss")
.resizable()
.frame(width:50,height:50)
}
}
Ama burada sorun var. Bu Görüntüyü bir Düğmenin içine eklerseniz, Görüntü gösterilmeyecektir, sadece bir mavi renk bloğu olacaktır. Bu sorunu çözmek için şunu yapın:
import SwiftUI
struct ImageViewer : View{
var body : some View {
Button(action:{}){
Image("Ssss")
.renderingMode(.original)
.resizable()
.frame(width:50,height:50)
}
}
}
Eh, It görünüyor oldukça kolay SwiftUI onlar verilen demo ardından /: 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)
}
Umarım yardımcı olur.
Görüntü Özelliklerini aşağıdaki gibi tanımlayabilirsiniz: -
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
Kodun mantıksal yapısını anlamak çok önemlidir. SwiftUI'de olduğu gibi, bir görüntü varsayılan olarak yeniden boyutlandırılamaz. Bu nedenle, herhangi bir görüntüyü yeniden boyutlandırmak için, bir Görüntü görünümünü bildirdikten hemen sonra .resizable () değiştiricisini uygulayarak yeniden boyutlandırılabilir hale getirmeniz gerekir.
Image("An Image file name")
.resizable()
Varsayılan olarak, görüntü görünümleri içeriklerine göre kendilerini otomatik olarak boyutlandırır ve bu da ekranın ötesine geçmelerine neden olabilir. Resizable () değiştiriciyi eklerseniz, görüntü bunun yerine otomatik olarak tüm kullanılabilir alanı dolduracak şekilde boyutlandırılır:
Image("example-image")
.resizable()
Bununla birlikte, bu aynı zamanda görüntünün orijinal en boy oranının bozulmasına da neden olabilir, çünkü alanı doldurmak için gereken miktarda tüm boyutlarda gerilecektir.
En boy oranını korumak istiyorsanız, .fill veya .fit kullanarak aşağıdaki gibi bir en-boy oranı değiştiricisi eklemelisiniz:
Image("example-image")
.resizable()
.aspectRatio(contentMode: .fit)