Как изменить размер изображения с SwiftUI? - PullRequest
5 голосов
/ 08 июня 2019

У меня есть большое изображение в Assets.xcassets. Как изменить размер этого изображения с SwiftUI, чтобы сделать его маленьким?

Я пытался установить кадр, но он не работает:

Image(room.thumbnailImage)
    .frame(width: 32.0, height: 32.0)

Ответы [ 4 ]

19 голосов
/ 08 июня 2019

Вы должны использовать .resizable() перед применением любых модификаций размера на Image.

Image(room.thumbnailImage).resizable()
.frame(width: 32.0, height: 32.0)
1 голос
/ 26 июня 2019

Расширение ответов и комментариев @ rraphael:

Начиная с Xcode 11 beta 2, вы можете масштабировать изображение до произвольных размеров, сохраняя при этом исходное соотношение сторон, оборачивая изображение в другой элемент.

например

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)

        }
    }
}

Результаты

Fitted images preserving aspect ratio

(По какой-то причине изображение показываеткак немного размыто. Будьте уверены, что реальный результат острый.)

0 голосов
/ 15 июля 2019

Ну, это кажется довольно просто в SwiftUI / После демонстрации, которую они дали: 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)
 }
0 голосов
/ 20 июня 2019

Если вы хотите использовать форматное соотношение с изменением размера, вы можете использовать следующий код:

Image(landmark.imageName).resizable()
                .frame(width: 56.0, height: 56.0)
                .aspectRatio(CGSize(width:50, height: 50), contentMode: .fit)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...