Warum hat .fullScreenCover einen transparenten Hintergrund und ignoriert den sicheren Bereich, wenn es nach der PhotoPicIOS

Programmierung für iOS
Anonymous
 Warum hat .fullScreenCover einen transparenten Hintergrund und ignoriert den sicheren Bereich, wenn es nach der PhotoPic

Post by Anonymous »

In meiner App habe ich einen PhotosPicker, der es dem Benutzer ermöglicht, ein Bild auszuwählen, und dann wird das Bild auf einem .fullScreenCover angezeigt, das angezeigt wird. Hier ist der Code:

Code: Select all

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()
}
}
}
}
Das Problem, das ich habe, ist, dass das .fullScreenCover, wenn es angezeigt wird, bis auf das Bild völlig transparent ist. Der Hintergrund sollte standardmäßig weiß sein.
Ich könnte einfach eine Problemumgehung durchführen und DocumentView in einen ZStack einschließen und seinen Hintergrund auf Weiß setzen, aber mir ist außerdem aufgefallen, dass es innerhalb der sicheren Bereiche nicht richtig formatiert wird (wenn Sie im Simulator das Bild des höhlenartigen Wasserflusses auswählen, das eine sehr große Höhe und eine geringe Breite hat, wird die Schaltfläche „Schließen“ direkt unter der Kerbe unten platziert).
Anfangs dachte ich, es hätte etwas mit dem asynchronen Laden zu tun, und habe versucht, die .sheet-Datei vom Hauptthread aus zu starten, aber es machte keinen Unterschied. Und ich muss ein Data-Objekt aus dem PhotosPicker extrahieren und es an DocumentView übergeben (anstelle nur eines Bildes), da DocumentView in meiner App mehr Zwecken dient als nur das Starten von Auswahlen aus dem PhotosPicker.
Ist das ein Fehler oder mache ich etwas falsch im Code?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post