IOS 17 ошибка? Добавление листа.IOS

Программируем под IOS
Ответить
Anonymous
 IOS 17 ошибка? Добавление листа.

Сообщение Anonymous »

Я работаю над созданием пользовательского всплывающего opup просмотра на основе .fullScreenCover . .FullScreenCover используется для размещения Popup на экране на полупрозрачном фоне.
Хотя это работает на iOS 18, есть проблема на iOS 17: Когда всплывающее окно содержит. src = "https://i.sstatic.net/km0juugy.gif" />
< /p>


При показе всплывающего окна непрозрачный фон охватывает основной контент. При нажатии на фон он становится прозрачным. < /Li>
< /ol>
< /li>


Изображение: ios 18. Все работает как задумано. При показе всплывающего окна основной фон покрыт полупрозрачным фон. Неважно, используется ли лист или нет. Добавить его в код представления достаточно, чтобы запустить проблему. /> code: < /strong> < /p>
struct SwiftUIView: View {
@State var isPresented: Bool = false
@State var sheetPresented: Bool = false

var body: some View {
ZStack {
VStack {
Color.red.frame(maxHeight: .infinity)
Color.green.frame(maxHeight: .infinity)
Color.yellow.frame(maxHeight: .infinity)
Color.blue.frame(maxHeight: .infinity)
}

Button("Show") {
isPresented = true
}
.padding()
.background(.white)

Popup(isPresented: $isPresented) {
VStack {
Button("Dismiss") {
isPresented = false
}
}
.frame(maxWidth: 300)
.padding()
.background(
RoundedRectangle(cornerRadius: 20)
.fill(.white)
)
.sheet(isPresented: $sheetPresented) {
Text("Hallo")
}
}
}
}
}

struct Popup: View {
@Binding var isPresented: Bool
let content: () -> Content

init(isPresented: Binding, @ViewBuilder _ content: @escaping () -> Content) {
_isPresented = isPresented
self.content = content
}

@State private var internalIsPresented: Bool = false
@State private var isShowing: Bool = false
let transitionDuration: TimeInterval = 0.5

var body: some View {
ZStack { }
.fullScreenCover(isPresented: $internalIsPresented) {
VStack {
content()
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(
Color.black.opacity(0.5)
.opacity(isShowing ? 1 : 0)
.animation(.easeOut(duration: transitionDuration), value: isShowing)
.ignoresSafeArea()
)
.presentationBackground(.clear)
.onAppear {
isShowing = true
}
.onDisappear {
isShowing = false
}
}
.onChange(of: isPresented) { _ in
withoutAnimation {
internalIsPresented = isPresented
}
}
}
}

extension View {
func withoutAnimation(action: @escaping () -> Void) {
var transaction = Transaction()
transaction.disablesAnimations = true
withTransaction(transaction) {
action()
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... und-opaque
Ответить

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

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

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

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

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