Настройте фон с Модификатором - PullRequest
0 голосов
/ 02 ноября 2019

Доброе утро всем,

Я изучаю SwiftUI, и я посмотрел весь курс на веб-сайте Raywenderlich («Ваши первые приложения Ios и SwiftUI»).

В нем мы учимсясоздать структуру и метод, которые позволяют нам изменять представление.

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

Однако, когда я пытаюсь создать структуру и метод для изменения моего ZStack, сообщается о многих ошибках.

Вот мой код:

public struct BackGroundColor : ModifiedContent {
    public body (content : Content) -> some View {
        return content
        Color.init(red: 222/255, green: 196/255, blue: 125/255)
            .edgesIgnoringSafeArea(.all)
    }
}

// When I call the struc in my body 

struct ContentView: View {

    var body: some View {

        ZStack {
            .BackGroundColor()
       // some code
        }

    }
}

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

Спасибо за ваши ответы 101

1 Ответ

0 голосов
/ 02 ноября 2019

Есть как минимум три способа, которыми вы могли бы выполнить то, что вы хотите. Все они берут ваше представление и оборачивают его в ZStack, поверх представления Color. Основное различие заключается в том, как они называются.

1. Использование View

public struct BackgroundColorView<Content: View>: View {
    var view: Content

    var body: some View {
        ZStack {
            Color(red: 222/255, green: 196/255, blue: 125/255)
                .edgesIgnoringSafeArea(.all)
            view
        }
    }
}

И вы называете это так:

BackgroundColorView(view: Text("Hello World"))

2. Использование ViewModifier

public struct BackgroundColorModifier: ViewModifier {
    func body(content: Content) -> some View {
        ZStack {
            Color(red: 222/255, green: 196/255, blue: 125/255)
                .edgesIgnoringSafeArea(.all)
            content
        }
    }
}

И вы называете это так:

Text("Hello World")
        .modifier(BackgroundColorModifier())

3. Использование расширения View

extension View {
    public func colorBackground() -> some View {
        ZStack {
            Color(red: 222/255, green: 196/255, blue: 125/255)
                .edgesIgnoringSafeArea(.all)
            self
        }
    }
}

И вы называете это так:

Text("Hello World")
    .colorBackground()

Что использовать?

Я лично считаю, что # 3 - самый хороший вариант,и его легко расширить, чтобы принять параметр цвета:

extension View {
    public func colorBackground(_ color: Color) -> some View {
        ZStack {
            color
                .edgesIgnoringSafeArea(.all)
            self
        }
    }
}

И вы называете это так:

Text("Hello World")
    .colorBackground(Color.red)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...