iOS 14: Фоновое изображение среднего размера виджета не заполняется

По какой-то причине я не могу получить фон изображения для правильного заполнения в XCode версии 12.0, но только для размера виджета .systemMedium. Кажется, он отлично работает как с маленькими, так и с большими размерами.

У меня довольно простой вид:

import SwiftUI

@available(iOS 13.0.0, *)
struct Banana: View {

    var body: some View {
        VStack(alignment: .leading){
            Spacer()
            Text("Aardvark Exactlywhat")
                .font(.largeTitle)
                .bold()
                .padding(.bottom, 20)
                .padding(.leading, 20)
                .padding(.trailing, 20)
                .minimumScaleFactor(0.5)
                .foregroundColor(.white)
                .shadow(
                    color: Color.black,
                    radius: 1.0,
                    x: CGFloat(4),
                    y: CGFloat(4))
        }
        .edgesIgnoringSafeArea(.all)
        .background(
            Image("bananas")
                .resizable()
                .scaledToFill()
        ).edgesIgnoringSafeArea(.all)
    }
}

@available(iOS 13.0.0, *)
struct Banana_Previews: PreviewProvider {
    static var previews: some View {
        Banana()
    }
}

И довольно простой виджет:


struct fruitWidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        Banana()
    }
}

@main
struct fruitWidget: Widget {
    let kind: String = "fruitWidget"
    
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            fruitWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("fruit Widget")
        .description("Enhance your day with delicious fruit.")
        .supportedFamilies([.systemSmall, .systemMedium, .systemLarge])
    }
}

struct fruitWidget_Previews: PreviewProvider {
    static var previews: some View {
        Group{
            fruitWidgetEntryView(entry: SimpleEntry(date: Date()))
                .previewContext(
                    WidgetPreviewContext(family: .systemSmall))
            fruitWidgetEntryView(entry: SimpleEntry(date: Date()))
                .previewContext(
                    WidgetPreviewContext(family: .systemMedium))
            fruitWidgetEntryView(entry: SimpleEntry(date: Date()))
                .previewContext(
                    WidgetPreviewContext(family: .systemLarge))
        }
    }
}

Я пробовал изменить соотношение сторон, используя GeometryReader и frame (), и еще десяток других вариантов. Независимо от того, что я пытаюсь, в среднем виджете слева и справа появляются пустые места. Работает только для большого и маленького размера. См. Изображение:

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


person David Vincent Gagne    schedule 23.09.2020    source источник


Ответы (1)


Вот фиксированный вариант - в качестве фонового изображения нужно развернуть VStack на весь экран.

Примечание. edgesIgnoringSafeArea позволяет выйти за пределы безопасной зоны, когда контент шире, но не делает контент широким.

var body: some View {
    VStack(alignment: .leading){
        Spacer()
        Text("Aardvark Exactlywhat")
            .font(.largeTitle)
            .bold()
            .padding(.bottom, 20)
            .padding(.leading, 20)
            .padding(.trailing, 20)
            .minimumScaleFactor(0.5)
            .foregroundColor(.white)
            .shadow(
                color: Color.black,
                radius: 1.0,
                x: CGFloat(4),
                y: CGFloat(4))
    }
    .frame(maxWidth: .infinity, maxHeight: .infinity)   // << this one !!
    .edgesIgnoringSafeArea(.all)
    .background(
        Image("plant")
            .resizable()
            .scaledToFill()
    )
}
person Asperi    schedule 23.09.2020