Размытие SwiftUI нарушает макет прокруткиIOS

Программируем под IOS
Ответить
Anonymous
 Размытие SwiftUI нарушает макет прокрутки

Сообщение Anonymous »

В SwiftUI я обнаружил, что добавление размытия к содержимому некоторых страниц, имеющих ScrollView, нарушает макет из-за добавления неожиданной вставки в верхней части ScrollView. Я сделал минимальный воспроизводимый пример следующим образом:

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

import SwiftUI

struct ContentView: View {
@State private var isActive = false

var body: some View {
ZStack {
ScrollView {
VStack {
Rectangle()
.fill(.red)
.frame(height: 200)
Rectangle()
.fill(.orange)
.frame(height: 200)
Rectangle()
.fill(.blue)
.frame(height: 200)
Rectangle()
.fill(.purple)
.frame(height: 200)
Rectangle()
.fill(.yellow)
.frame(height: 200)
Button("Click me") {
isActive = true
}
}
}
.blur(radius: isActive ? 10 : 0)

if isActive {
Color.clear
.background(.black.opacity(0.1))
.contentShape(Rectangle())
.onTapGesture {
isActive = false
}
.border(.orange)
}
}
}
}

#Preview {
ContentView()
}
Чтобы увидеть проблему в действии, запустите приложение и прокрутите вниз, чтобы активировать наложение. Затем нажмите на строку состояния, чтобы прокрутить ее до самого верха. Нажатие на наложение деактивирует его, но ScrollView теперь смещается вниз примерно на 20 пикселей. Кажется, эта проблема не возникает, если к содержимому не применяется размытие.
Нажатие на строку состояния для прокрутки вверх — самый надежный способ воспроизвести проблему, который я нашел, но иногда это происходит, когда просто щелкаешь по наложению, чтобы закрыть его.
Кто-нибудь знает, что является причиной этого? Это ошибка SwiftUI или я делаю что-то не так? Я наблюдал эту проблему в iOS 17.5 и бета-версии iOS 18 с XCode 15.4.
Изменить: добавление изображений
  • Исходное состояние
    Изображение
  • После выполнения описанных выше действий
    Изображение
  • Предпринятые действия
    Изображение
  • Иерархия представлений отладки
    Изображение
    Судя по иерархии представлений отладки, кажется, что элементы смещены примерно на 20 пикселей относительно того места, где они в конечном итоге отображаются.


Подробнее здесь: https://stackoverflow.com/questions/786 ... iew-layout
Ответить

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

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

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

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

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