SwiftUI Отображение изображения в объекте выбора - PullRequest
2 голосов
/ 21 марта 2020

Я пытаюсь реализовать SwiftUI-версию UIKit Country Picker.

Пользователь вводит форму, в которой есть объект Picker, который должен создать Picker со всеми странами вместе с изображением флага страны.

См. Снимки экрана ниже:

Первый экран - это форма при первой попытке добавить отзыв

enter image description here

Пользователь щелкает объект выбора Страна происхождения, и он переходит к представлению Страны. ** Это где проблема, изображения не рендерится !? **

enter image description here

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

enter image description here

Кто-нибудь смог выяснить, является ли решение этой проблемы или это ошибка с iOS 13!?

Код выглядит следующим образом:

Form {

    TextField("Name", text: $name)
    TextField("Description", text: $desc)

    Picker(selection: $countryOrigin, label: Text("Country of Origin")) {

        Section(header: SearchBar(text: $fetcher.searchQuery)) {

            List(fetcher.country) { country in

                HStack() {

                    Image(uiImage: UIImage(contentsOfFile: Bundle.main.path(forResource: "CountryPicker", ofType: "bundle")! + "/Images/\(country.id).png")!)
                        .clipShape(Circle())

                    Text(country.name)

                }

            }

        }

    }

}

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Image Tests

Слева направо:

  1. Изображение (uiImage:), отображаемое в разделе формы в HStack
  2. Изображение в средстве выбора с изображением (uiImage:)
  3. Изображение в средстве выбора с изображением (systemImage:)

Вы можете видеть, что в 2 и 3 автоматически применяется оттенок / маска (maskColor) черного (при использовании не темного режима и оттенок / маска белого в темном режиме).

Чтобы остановить это поведение, необходимо добавить этот модификатор к изображению, но перед изменением размера ()

.renderingMode (Image.TemplateRenderingMode.original)

0 голосов
/ 21 марта 2020

просто используйте Picker

import SwiftUI

struct ContentView: View {
    @State var sel  = -1
    let trashes = ["trash", "trash.fill", "trash.slash", "trash.slash.fill"]

    var body: some View {
        NavigationView {
            Form {
                Picker(selection: $sel, label: Text("Trash type")) {
                    ForEach(0 ..< trashes.count) { (i) in
                        HStack {
                            Image(systemName: self.trashes[i])
                            Text(self.trashes[i])
                        }.tag(i)
                    }
                }
            }.navigationBarTitle("Select trash")
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

enter image description here

ОБНОВЛЕНИЕ вместо SearchBar Я использовал текст для простоты

import SwiftUI

struct ContentView: View {
    @State var sel  = -1
    let trashes = ["trash", "trash.fill", "trash.slash", "trash.slash.fill"]

    var body: some View {
        NavigationView {
            Form {
                Picker(selection: $sel, label: Text("Trash type")) {
                    Section(header: Text("Header")) {
                    ForEach(0 ..< trashes.count) { (i) in
                        HStack {
                            Image(systemName: self.trashes[i])
                            Text(self.trashes[i])
                        }.tag(i)
                    }
                }
                }
            }.navigationBarTitle("Select trash")
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

enter image description here

...