SwiftUI Widget iOS 14: проблема с градиентом

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

struct WeatherWidgetMediumView: View {
    
    var gradient: LinearGradient {
        LinearGradient(
            gradient: Gradient(
                colors:
                [
                    Color(red: 96.0/255.0, green: 171.0/255.0, blue: 239.0/255.0),
                    Color(red: 163.0/255.0, green: 230.0/255.0, blue: 244.0/255.0)
                ]),
            startPoint: .top,
            endPoint: .bottom)
    }
    
    var body: some View {
        GeometryReader { geo in
            HStack(alignment: .center) {
                Divider().background(Color.black).padding(.vertical, 16.0).opacity(0.1)
            }
        }
        .background(gradient)
    }
}

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

Но если бы я добавил еще один цвет, он выглядит великолепно.

struct WeatherWidgetMediumView: View {
    let weather: Weather
    
    var gradient: LinearGradient {
        LinearGradient(
            gradient: Gradient(
                colors:
                [
                    Color(red: 96.0/255.0, green: 171.0/255.0, blue: 239.0/255.0),
                    Color(red: 96.0/255.0, green: 171.0/255.0, blue: 239.0/255.0),
                    Color(red: 163.0/255.0, green: 230.0/255.0, blue: 244.0/255.0)
                ]),
            startPoint: .top,
            endPoint: .bottom)
    }
    
    var body: some View {
        GeometryReader { geo in
            HStack(alignment: .center) {
                Divider().background(Color.black).padding(.vertical, 16.0).opacity(0.1)
            }
            Spacer()
        }
        .background(gradient)
    }
}

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

UPD: создайте проект GitHub с этой проблемой

https://github.com/Maxim-Zakopaylov/widgetKitGradientIssue


person Maxim Zakopaylov    schedule 22.10.2020    source источник
comment
Здесь отлично работает. Xcode 12.0. Разве вы не пользуетесь бета-версией?   -  person Asperi    schedule 22.10.2020
comment
Я использую 12.0.1   -  person Maxim Zakopaylov    schedule 22.10.2020
comment
@Asperi, у тебя есть синий градиент с первыми двумя цветами? Моя проблема в том, что у меня неправильный цвет, когда я использую только два цвета :( Когда я использовал только два цвета (оба синие), у меня был зеленый градиент! Это сводит меня с ума!   -  person Maxim Zakopaylov    schedule 22.10.2020
comment
Да, у меня есть синий градиент с первым снимком кода, имеющим два цвета.   -  person Asperi    schedule 22.10.2020
comment
У меня такая же проблема с виджетом   -  person Nandha    schedule 30.10.2020


Ответы (2)


Я столкнулся с точной проблемой в своем приложении, и я исправил ее, добавив .blendMode (.darken) после модификатора фона. Надеюсь, это тоже решит вашу проблему.

person Faisal AlMaarik    schedule 02.05.2021

Этот код показывает ошибку с цветами градиента, которая происходит при использовании расширения Widgets для iOS 14.

LinearGradient(gradient: Gradient(colors: [ Color(red: 0, green: 0.569, blue: 0.945), Color(red: 0, green: 0.329, blue: 0.953)]), startPoint: .top, endPoint: .bottom)

Также все три типа градиента соответствуют протоколу ShapeStyle, вы можете использовать их для фона, заливки и обводки. Например, здесь используется наш радужный конический градиент как толстая внутренняя обводка для круга:

Circle()
    .strokeBorder(
        AngularGradient(gradient: Gradient(colors: [.red, .yellow, .green, .blue, .purple, .red]), center: .center, startAngle: .zero, endAngle: .degrees(360)),
        lineWidth: 50
    )
    .frame(width: 200, height: 200)
person Paresh Mangukiya    schedule 03.05.2021