Безопасная область клавиатуры игнорируется после открытия NavigationStack — приложение iOS 18 на iOS 26IOS

Программируем под IOS
Ответить
Anonymous
 Безопасная область клавиатуры игнорируется после открытия NavigationStack — приложение iOS 18 на iOS 26

Сообщение Anonymous »

У меня возникла проблема на iOS 26 с приложением, созданным с помощью iOS 18. После открытия стека навигации безопасная область клавиатуры не учитывается, что приводит к скрытию пользовательского интерфейса.
Это происходит в сборке App Store, созданной с помощью Xcode 16 для iOS 18, а затем установленной из App Store на iOS 26.
Примечание: Проблема также возникает, если я использую Xcode 26, установите минимальную цель развертывания iOS 26 и создайте симулятор iOS 26. UUIDesignRequiresCompatibility не влияет.
Видео
Проблема iOS 26
Изображение

Поведение iOS 18
Обратите внимание, что в iOS 18 клавиатура не остается в фокусе при переходе назад. Если затем я сосредоточу его на «Показать», все будет работать так, как ожидалось, безопасная зона соблюдается.
Изображение

Минимальный воспроизводимый пример
Для минимальный воспроизводимый пример: создайте новый проект (в Xcode 16) и запустите его на симуляторе (iOS 26).
(Чтобы получить симуляторы iOS 26 в Xcode 16, я просто установил Xcode 26, запустил и установил среду выполнения iOS, а затем снова в Xcode 16 я смог добавить симулятор iOS 26)
В ContentView, у нас есть это:

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

struct ContentView: View {
@State private var text: String = ""
@FocusState private var isFocused: Bool
@State private var navigationPath = NavigationPath()

var body: some View {
NavigationStack(path: $navigationPath) {
VStack(spacing: 20) {
TextField("Text", text: $text)
.font(.title)
.padding(10)
.border(Color.black.opacity(isFocused ? 0.75 : 0.25))
.focused($isFocused)
Button("dismiss keyboard") { isFocused = false }
Spacer()
}
.padding(40)
.safeAreaInset(edge: .bottom) {
Button("Go to screen 2") { navigationPath.append("2") }
.font(.title)
.buttonStyle(.borderedProminent)
}
.navigationDestination(for: String.self) { _ in Text("Screen 2") }
}
}
}
Примечания
  • Код: Выделить всё

    UIDesignRequiresCompatibility
    в Info.plist не имеет никакого эффекта.
  • Проблема на самом деле также возникает, если я использую Xcode 26, устанавливаю минимальную цель развертывания iOS 26 и делаю сборку для симулятора iOS 26. UIDdesignRequiresCompatibility не имеет никакого эффекта.
  • Та же проблема с представлениями прокрутки/списками: ту же проблему можно увидеть и в другом распространенном сценарии - вместо «нижнего элемента, закрепленного в безопасной области», у вас может быть список (или представление прокрутки с некоторыми элементами), и тогда проблема в том, что при возвращении на экран представление прокрутки не работает. не полностью прокручивать вниз (поскольку смещение прокрутки не учитывает безопасную область)
  • Текущий обходной путь: прямо сейчас, чтобы решить эту проблему, я вручную убираю клавиатуру перед переходом к Экрану 2. Если мне также действительно нужно поведение «фокус на появлении» для начального экрана, это должно быть сделано с задержкой около 1 секунды. Все это на самом деле не идеально.


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

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

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

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

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

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