- Требуется iOS 26+
- создайте любой ввод, который вызывает открытие клавиатуры
- добавьте панель инструментов на клавиатуру (с любыми кнопками)
- откройте клавиатуру (например, сфокусировав ввод)
- закрыть клавиатуру
- фоновое приложение (на этом этапе печатаются предупреждения)
- вернуться на передний план
- увидеть, что нижняя безопасная область нарушена (вы можете добавить любое представление, привязанное к безопасной области)

Выводятся следующие предупреждения:
-[RTIInputSystemClient RemoteTextInputSessionWithID:performInputOperation:] для выполнения операции ввода требуется действительный идентификатор сеанса. inputModality = Keyboard, inputOperation = ignoreAutoFillPanel, customInfoType = UIUserInteractionRemoteInputOperations
-[RTIInputSystemClient RemoteTextInputSessionWithID:performInputOperation:] для выполнения операции ввода требуется действительный идентификатор сеанса. inputModality = Keyboard, inputOperation = ignoreAutoFillPanel, customInfoType = UIUserInteractionRemoteInputOperations
Для создания моментального снимка представления (0x15b0a4800, UIKeyboardImpl), которого нет в видимом окне, требуется afterScreenUpdates:YES.
Вот тестовый проект для демонстрация проблемы:
import SwiftUI
struct ContentView: View {
@State var selection: Int = 0
@State var presentingModal = false
var body: some View {
NavigationStack {
VStack(spacing: 0) {
TabView(selection: $selection) {
Group {
Button("Present") { self.presentingModal = true }
.tag(0)
Text("Second").tag(1)
}
.toolbar(.hidden, for: .tabBar)
}
HStack(spacing: 0) {
ForEach(0...1, id: \.self) { tab in
Image(systemName: "cloud.heavyrain.fill")
.padding(.vertical, 16)
.frame(maxWidth: .infinity)
.contentShape(Rectangle())
.onTapGesture {
selection = tab
}
}
}
.padding(.horizontal, 16)
.background(Color.secondary)
}
.ignoresSafeArea(.keyboard)
.navigationTitle("Title")
.navigationBarTitleDisplayMode(.inline)
}
.sheet(isPresented: $presentingModal) {
PresentedView()
}
}
}
struct PresentedView: View {
@State var text = ""
@FocusState var isInputActive: Bool
var body: some View {
NavigationStack {
VStack {
TextField("", text: $text)
.focused($isInputActive)
.padding()
.background(.secondary)
Spacer()
}
.padding(.top, 40)
.padding(.horizontal, 20)
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Button("Close") {
isInputActive = false
}
}
}
}
}
}
#Preview {
ContentView()
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... -on-ios-26
Мобильная версия