Фокус ввода текста в режиме навигации возвращается к исходному виду при отображении программной клавиатуры.IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Гость
 Фокус ввода текста в режиме навигации возвращается к исходному виду при отображении программной клавиатуры.

Сообщение Гость »


Приведенный ниже код создает простую структуру NavigationView с двумя подпредставлениями: LoggedOutView с кнопкой, которая ведет к RegistrationView с простым полем ввода. . Я использую GeometryReader, потому что без прямого указания размеров кадра многих используемых элементов пользовательского интерфейса он не будет правильно размещаться (например, нижний элемент в LoggedOutView должен всегда придерживаться нижний). Кроме того, представления должны находиться в ScrollView для эффекта эластичного перетаскивания, но, похоже, это не влияет на проблему.

Проблема заключается в том, что при переходе к RegistrationView и фокусировке поля ввода при использовании программной клавиатуры на симуляторе (или устройстве) представление навигации мгновенно возвращается к LoggedOutView ( или, скорее, ContentView, который автоматически переходит в LoggedOutView). Проблема не возникает, если не активировать программную клавиатуру в симуляторе, поэтому похоже, что из-за того, что программная клавиатура показывает, что макет имеет конфликт, который заставляет вид навигации вернуться назад.

Я не получаю журнал ошибок в Xcode, связанный с этой проблемой, и не знаю, почему возникает эта проблема, но, возможно, мой LoggedOutView настроен неправильно? Это для SwiftUI 2, проблема возникает в iOS 14 и 15.

Просмотр содержимого

импортировать SwiftUI перечисление NavigationViewTarget: String { дело ContentView случай LoggedOutView дело РегистрацияПросмотреть } структура ContentView: Просмотр { @State частная переменная NavigationViewTarget: NavigationViewTarget? = .ContentView var body: some View { GeometryReader { гео в НавигацияВью { NavigationLink (пункт назначения: LoggedOutView(), тег: .LoggedOutView, выбор: $navigationViewTarget) { EmptyView() } .скрытый() .navigationBarHidden(истина) } .frame(ширина: geo.size.width, высота: geo.size.height) .onAppear(выполнить: onAppear) } } частная функция onAppear() { NavigationViewTarget = .LoggedOutView } } структура ContentView_Previews: PreviewProvider { статические предварительные просмотры var: some View { КонтентПросмотр() } } LoggedOutView

импортировать SwiftUI структура LoggedOutView: Просмотр { @State частная переменная NavigationViewTarget: NavigationViewTarget? = .LoggedOutView var body: some View { GeometryReader { гео в ScrollView (showsIndicators: false) { VStack(выравнивание: .leading) { Spacer().frame(maxWidth: .infinity, maxHeight: 28,0) RoundedRectangle(cornerRadius: 10) .scaledToFit() .frame(ширина: abs(geo.size.width - 60), высота: abs(geo.size.width - 60)) .padding(.leading, 30) .padding(.trailing, 30) .foregroundColor(.gray) Spacer().frame(maxWidth: .infinity) .layoutPriority(-1) HStack { NavigationLink(пункт назначения: RegistrationView(), тег: .RegistrationView, выбор: $navigationViewTarget) { EmptyView() }.hidden() Кнопка (действие: { NavigationViewTarget = .RegistrationView }) { Разделитель() Текст("Регистр").padding(16) Разделитель() } .frame(высота: 45) .фон(.красный) .foregroundColor(.white) } .frame(ширина: abs(geo.size.width - 60)) .padding(.leading, 30) .padding(.trailing, 30) Spacer().frame(maxWidth: .infinity, minHeight: 90) .layoutPriority(-2) ВСтек { RoundedRectangle(cornerRadius: 10) .frame(ширина: abs(geo.size.width - 60), высота: 50) .padding(.leading, 30) .padding(.trailing, 30) .foregroundColor(.gray) } .frame(ширина: geo.size.width) .padding(.bottom, 16) } .frame(высота: abs(geo.size.height - geo.safeAreaInsets.bottom)) .padding(30) } .frame(ширина: geo.size.width) .navigationBarHidden(истина) .navigationBarTitleDisplayMode(.inline) .navigationViewStyle(StackNavigationViewStyle()) } } } структура LoggedOutView_Previews: PreviewProvider { статические предварительные просмотры var: some View { НавигацияView { Логгедаутвиев() .navigationBarTitleDisplayMode(.inline) .navigationViewStyle(StackNavigationViewStyle()) .navigationBarHidden(истина) } } } Просмотр регистрации
импортировать SwiftUI структура RegistrationView: Посмотреть { @State var электронная почта = "" var body: some View { GeometryReader { гео в ScrollView (showsIndicators: false) { VStack(выравнивание: .leading) { Spacer().frame(maxWidth: .infinity, maxHeight: 10) VStack(выравнивание: .leading, интервал: 16) { VStack(выравнивание: .leading, интервал: 2) { TextField("Электронная почта", текст: $email) } } } .padding(30) } .frame(ширина: geo.size.width, высота: гео.размер.высота) .navigationBarTitleDisplayMode(.inline) .navigationViewStyle(StackNavigationViewStyle()) .navigationBarHidden(ложь) } .navigationBarTitle("Регистрация", displayMode: .inline) } } структура RegistrationView_Previews: PreviewProvider { статические предварительные просмотры var: some View { НавигацияView { РегистрацияПросмотр() .navigationBarTitleDisplayMode(.inline) .navigationViewStyle(StackNavigationViewStyle()) } } }
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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