Проблема Xamarin Forms ScrollView с редактором при использовании программной клавиатуры

Я использую Xamarin Forms с iOS. У меня есть редактор в режиме прокрутки. Редактор настроен на заполнение большей части страницы. Это работает.

<ContentPage.Content>
    <ScrollView>
    <StackLayout>
        <Editor x:Name = "NotesEditor" Text = "{Binding Contact.AttendanceDetails.Notes, Mode=TwoWay}"  VerticalOptions = "FillAndExpand" 
            HorizontalOptions = "FillAndExpand" BackgroundColor = "AliceBlue" TextChanged = "NotesEditor_TextChanged"  ></Editor>
        <Label x:Name = "RemainingText" VerticalOptions = "Fill" HorizontalOptions = "CenterAndExpand" HeightRequest = "40"></Label>
    </StackLayout>
    </ScrollView>
</ContentPage.Content>

Проблема заключается в том, что когда используется программная клавиатура, страница прокручивается, и когда пользователь начинает печатать, он изначально не видит текст, который набирает на клавиатуре, без ручной прокрутки.

Есть ли способ, которым программная клавиатура не нажимает прокрутку? Может, пользователь может сделать это вручную?

Любые мысли будут оценены.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
2 316
4

Ответы 4

Я не уверен в вашем варианте использования, но почему бы полностью не удалить ScrollView? Нет причин для прокрутки, если редактор работает в полноэкранном режиме. Вы можете применить маржу к метке, если хотите ее видеть.

<ContentPage.Content>
    <StackLayout>
        <Editor x:Name = "NotesEditor" Text = "{Binding Contact.AttendanceDetails.Notes, Mode=TwoWay}"  VerticalOptions = "FillAndExpand" 
            HorizontalOptions = "FillAndExpand" BackgroundColor = "AliceBlue" TextChanged = "NotesEditor_TextChanged"  ></Editor>
        <Label x:Name = "RemainingText" VerticalOptions = "Fill" HorizontalOptions = "CenterAndExpand" HeightRequest = "40" margin = "10, 30, 10, 30"></Label>
    </StackLayout>
</ContentPage.Content>

ну, ему нужна прокрутка, чтобы редактор двигался вместе с клавиатурой, когда он отображается, а не исчезает.

Ahmad ElMadi 12.07.2018 13:30

Мне нужен режим прокрутки, как будто есть текст, который даже выходит за пределы экрана и т. д., к сожалению, нет возможности прокрутки элемента управления. Исправил, ответ тоже поставлю. Спасибо за вашу помощь.

the_tr00per 12.07.2018 13:38

Попробуйте этот компонент, он может работать без необходимости в scrollView. Однако это не удастся, если вы включите расширение редактора.

https://devlinduldulao.pro/how-to-fix-keyboard-overlapping-or-covering-entry/

Управил исправлением, добавив событие в событие Editor Focused:

XAML:

<ScrollView x:Name = "scrollview">
    <StackLayout>
        <Editor x:Name = "NotesEditor" Text = "{Binding Contact.Notes, Mode=TwoWay}"  VerticalOptions = "FillAndExpand" 
            HorizontalOptions = "FillAndExpand" BackgroundColor = "AliceBlue" TextChanged = "NotesEditor_TextChanged" Focused = "NotesEditor_Focused"   ></Editor>
        <Label x:Name = "RemainingText" VerticalOptions = "Fill" HorizontalOptions = "CenterAndExpand" HeightRequest = "40"></Label>
    </StackLayout>
    </ScrollView>

Код позади:

private void NotesEditor_Focused(object sender, FocusEventArgs e)
    {
        scrollview.ScrollToAsync(0, 0,true);
    }

Если вам нужен редактор в режиме прокрутки, вы можете попробовать это решение.

<ContentPage>
 <ScrollView >
                  <Grid VerticalOptions = "FillAndExpand">
                              <Grid.RowDefinitions>
                             <RowDefinition Height = "Auto" />
                               </Grid.RowDefinitions>
                     
                   <Editor VerticalOptions = "FillAndExpand"
                                                       AutoSize = "TextChanges"
                              -----
                              Grid.Row = "0" />
                     </Grid>
  </ScrollView>
</ContentPage>

например: ваш код должен быть таким

<ContentPage.Content>
    <ScrollView>
   <Grid VerticalOptions = "FillAndExpand">
                              <Grid.RowDefinitions>
                                <RowDefinition Height = "Auto" />
                                 <RowDefinition Height = "Auto" />
                               </Grid.RowDefinitions>
        <Editor x:Name = "NotesEditor" Text = "{Binding Contact.AttendanceDetails.Notes, Mode=TwoWay}"  VerticalOptions = "FillAndExpand" 
            HorizontalOptions = "FillAndExpand" BackgroundColor = "AliceBlue" TextChanged = "NotesEditor_TextChanged" Grid.Row = "0" ></Editor>
        <Label x:Name = "RemainingText" VerticalOptions = "Fill" HorizontalOptions = "CenterAndExpand" HeightRequest = "40" Grid.Row = "1"></Label>
    </Grid>
    </ScrollView>
</ContentPage.Content>

Примечание. При необходимости вы можете установить hightRequest для прокрутки.

Другие вопросы по теме