Clipped на самом деле не обрезает изображение в SwiftUI

Я пытаюсь обрезать изображение, и, когда мы видим пользовательский интерфейс, он выглядит нормально, но на самом деле он не обрезает изображение, что приводит к тому, что другие элементы пользовательского интерфейса перестают отвечать на запросы.

введите здесь описание изображения

Вот код, который я использую.

struct ImageContentView: View {
    var urls:[String] = [
        "https://lh3.googleusercontent.com/proxy/80im-IBfLODpLDj8d02uEpSVIhqdjen6H6CeFwgRBxeua-Dgw0R3WONFj1Gk8CwB_MufmC9rQ8qHjyWMejwFcJ1PA2s8AAu5WVsmJA=s0-d",
        "https://wallpaperaccess.com/full/530919.jpg"
    ] 
    var body: some View {
        ScrollView{
            VStack{
                Button(action: {
                    
                }, label: {
                    Text("Hello")
                })
                VStack(spacing: 20.0) {
                    ForEach(self.urls, id:\.self) { url in
                        WebImage(url: URL.init(string: url)!)
                            .resizable()
                            .aspectRatio(contentMode: ContentMode.fill)
                            .frame(height: UIScreen.main.bounds.size.width * 0.5) 
                            .clipped()
                            .cornerRadius(10.0)
                            .shadow(color: Color.red, radius: 10.0, x: 0, y: 0)
                    }
                }.padding()
            }
        }
    }
}    

person Malav Soni    schedule 07.08.2020    source источник
comment
Я пробовал ContentShape, а также ClipShape, но не работал.   -  person Malav Soni    schedule 07.08.2020


Ответы (1)


Вот исправленная часть (проверено с Xcode 12/iOS 14)

VStack(spacing: 20.0) {
    ForEach(self.urls, id:\.self) { url in
        WebImage(url: URL.init(string: url)!)
            .resizable()
            .aspectRatio(contentMode: ContentMode.fill)
            .frame(height: UIScreen.main.bounds.size.width * 0.5)
            .clipped()
            .cornerRadius(10.0)
            .shadow(color: Color.red, radius: 10.0, x: 0, y: 0)
    }.contentShape(Rectangle())   // << here !!
}.padding()

Примечание. Я не знаю, что у вас за WebImage, но с Image и локальными изображениями оно тоже воспроизводилось, поэтому исправление было проверено.

person Asperi    schedule 07.08.2020
comment
WebImage из библиотеки SDWebImageSwiftUI. - person Malav Soni; 07.08.2020
comment
Это не работает для меня. Я загружаю изображение с URL-адреса и отображаю его - person Malav Soni; 07.08.2020
comment
Тогда это ошибка и в WebImage, потому что выше работает для изображения. Вы также можете попробовать поместить .contentShape в VStack. - person Asperi; 07.08.2020
comment
Спасибо! Простое добавление модификатора contentShape Rectangle решило проблему для меня. - person Linus; 18.02.2021