Почему .fullScreenCover имеет прозрачный фон и игнорирует безопасную область при представлении после выбора PhotoPicker?IOS

Программируем под IOS
Ответить
Anonymous
 Почему .fullScreenCover имеет прозрачный фон и игнорирует безопасную область при представлении после выбора PhotoPicker?

Сообщение Anonymous »

В моем приложении есть PhotosPicker, который позволяет пользователю выбрать изображение, а затем изображение отображается во всплывающем окне .fullScreenCover. Вот код:

Код: Выделить всё

import SwiftUI
import PhotosUI

struct HomeView: View {
@State private var documentViewIsPresented = false
@State private var photosPickerIsPresented = false
@State private var selectedPhotosPickerItem: PhotosPickerItem?
@State private var selectedPhotosPickerItemData: Data?

var body: some View {
ZStack {
Color.green.ignoresSafeArea()

VStack {
Button("Add Image") {
photosPickerIsPresented = true
}
}
.photosPicker(isPresented: $photosPickerIsPresented,
selection: $selectedPhotosPickerItem,
matching: .images)
.onChange(of: selectedPhotosPickerItem) {
if let selectedPhotosPickerItem = selectedPhotosPickerItem {
Task {
if let data = try? await selectedPhotosPickerItem.loadTransferable(type: Data.self) {
selectedPhotosPickerItemData = data
}
}
}
}
.onChange(of: selectedPhotosPickerItemData) {
if selectedPhotosPickerItemData != nil {
documentViewIsPresented = true
}
}
.fullScreenCover(isPresented: $documentViewIsPresented) {
if let selectedPhotosPickerItemData = selectedPhotosPickerItemData {
DocumentView(data: selectedPhotosPickerItemData)
}
}
}
}
}

struct DocumentView: View {
private(set) var data: Data
@Environment(\.dismiss) private var dismiss

var body: some View {
VStack {
if let image = UIImage(data: data) {
Image(uiImage: image)
.resizable()
.aspectRatio(contentMode: .fit)
}

HStack {
Spacer()
Button("Close") {
dismiss()
}
Spacer()
}
}
}
}
У меня проблема в том, что когда появляется .fullScreenCover, он полностью прозрачен, за исключением изображения. По умолчанию фон должен быть белым.
Я мог бы просто использовать обходной путь и обернуть DocumentView в ZStack и установить для него белый фон, но я заметил еще одну вещь: он неправильно форматируется в безопасных областях (если вы выберете в симуляторе изображение пещеристого потока воды, которое имеет очень большую высоту и небольшую ширину, кнопка «закрыть» будет помещена прямо под вырезом внизу).
Сначала я подумал, что это как-то связано с асинхронной загрузкой, и попробовал запустить .sheet из основного потока, но это не помогло. И мне нужно извлечь объект Data из PhotosPicker и передать его в DocumentView (а не просто изображение), потому что в моем приложении DocumentView служит большему числу целей, чем просто запуск выделений из PhotosPicker.
Это ошибка или я делаю что-то не так в коде?

Подробнее здесь: https://stackoverflow.com/questions/797 ... -area-when
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»