SwiftUI Изображение, обрезанное по форме, имеет прозрачное заполнение в контекстном меню

В моем приложении SwiftUI в моем каталоге ресурсов есть изображение с соотношением сторон 1: 1. В моем коде у меня есть Image представление с другим соотношением сторон, которое обрезает изображение до нового размера:

Image("My Image")
    .resizable()
    .aspectRatio(contentMode: .fill)
    .frame(width: 300, height: 250)
    .clipped()

изображение обрезано до соотношения сторон

Но когда я прикрепляю к этому изображению контекстное меню (с модификатором contextMenu), исходное соотношение сторон сохраняется, но с прозрачным отступом:

изображение обрезано до соотношения сторон с помощью контекстного меню

Как сохранить изображение обрезанным в новом кадре внутри контекстного меню, чтобы не было отступов?


person Wilson Gramer    schedule 02.07.2020    source источник


Ответы (1)


Я смог решить эту проблему, добавив к изображению модификатор .contentShape(Rectangle()):

Image("My Image")
    .resizable()
    .aspectRatio(contentMode: .fill)
    .frame(width: 300, height: 250)
    .clipped()
    .contentShape(Rectangle())
    .contextMenu {
        Text("Menu Item")
    }

изображение обрезано до соотношения сторон с помощью контекстного меню - правильное поведение

person Wilson Gramer    schedule 02.07.2020
comment
Это было такое красивое решение. Я также смог использовать форму содержимого, чтобы изменить предварительный просмотр контекстного меню на Circle (). Спасибо! - person Adit Gupta; 09.10.2020
comment
yip, этот вопрос и ответ все еще полезны. помог мне спасибо - person Muhammad Ahmod; 17.02.2021