Как игнорироватьSafeArea при представлении контента в SwiftUI Sheet?IOS

Программируем под IOS
Ответить
Anonymous
 Как игнорироватьSafeArea при представлении контента в SwiftUI Sheet?

Сообщение Anonymous »

Я представляю представление SwiftUI с использованием UIHostingController с modalPresentationStyle = .overCurrentContext. Внутри этого корневого представления SwiftUI я представляю .sheet со специальным модификатором, делающим фон листа прозрачным.
Минимальный воспроизводимый код:

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

import SwiftUI

class SheetViewModel: ObservableObject {
@Published var isPresented: Bool = true
}

struct RootSheetWrapper: View {
@StateObject var viewModel: SheetViewModel

var body: some View {
// Transparent host view acting as the anchor for the sheet
Color.clear
.customTransparentSheet(isPresented: $viewModel.isPresented, height: 400) {
SheetContent()
}
}
}

// Minimal version of my custom sheet extension
extension View {
func customTransparentSheet(
isPresented: Binding,
height: CGFloat,
@ViewBuilder content: @escaping () -> Content
) -> some View {
ZStack {
self
SomeOverlay()
}
self.sheet(isPresented: isPresented) {
content()
.presentationDragIndicator(.hidden)
.applyTransparentBackground()
.presentationDetents([.height(height)])
}
}
}

private extension View {
@ViewBuilder
func applyTransparentBackground() -> some View {
if #available(iOS 16.4, *) {
self.presentationBackground(.clear)
} else {
self.background(Color.clear.ignoresSafeArea())
}
}
}
Содержимое листа:

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

struct SheetContent: View {
var body: some View {
VStack(spacing: 0) {
// This image should sit behind the home indicator
Image(systemName: "star.fill")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(maxWidth: .infinity)
}
// This makes the background transparent, but the bottom safe area
// still clips the Red background/Image above.
// .ignoresSafeArea(.all) // 

Подробнее здесь: [url]https://stackoverflow.com/questions/79851613/how-to-ignoresafearea-when-presenting-content-in-swiftui-sheet[/url]
Ответить

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

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

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

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

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