Перекрытие редактора и клавиатуры (iOS) Xamarin forms 3.6 не работает должным образом (визуальный = материал)

#xamarin.forms #xamarin.ios

#xamarin.forms #xamarin.ios

Вопрос:

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

Получена страница с редактором внизу с кнопкой и listview с некоторыми сообщениями вверху.

Я использую keyboardRenderer по этой ссылке

https://xamgirl.com/adjusting-elements-when-keyboard-shows-in-xamarin-forms/

Проблема

Когда я начинаю печатать, появляется клавиатура, и редактор полностью сворачивается, и я начинаю печатать, и он позволяет мне печатать, но он сворачивается (см. Рисунок), также иногда сворачивается и ничего не видно.

Как вы используете редактор с клавиатурой в iOS

Свернутый

введите описание изображения здесь

Не свернуто введите описание изображения здесь

Используется средство визуализации

 [assembly: ExportRenderer(typeof(KeyboardView), 
typeof(KeyboardViewRenderer))]
namespace KeyboardSample.iOS.Renderers
{
public class KeyboardViewRenderer : ViewRenderer
{
    NSObject keyboardShowObserver;
    NSObject keyboardHideObserver;
    protected override void OnElementChanged(ElementChangedEventArgs<View> e)
    {
        base.OnElementChanged(e);

        if (e.NewElement != null)
        {
            RegisterForKeyboardNotifications();
        }

        if (e.OldElement != null)
        {
            UnregisterForKeyboardNotifications();
        }
    }

    private void RegisterForKeyboardNotifications()
    {
        if (keyboardShowObserver == null)
            keyboardShowObserver = UIKeyboard.Notifications.ObserveWillShow(OnKeyboardShow);
        if (keyboardHideObserver == null)
            keyboardHideObserver = UIKeyboard.Notifications.ObserveWillHide(OnKeyboardHide);
    }

    private void OnKeyboardShow(object sender, UIKeyboardEventArgs args)
    {
        NSValue result = (NSValue)args.Notification.UserInfo.ObjectForKey(new NSString(UIKeyboard.FrameEndUserInfoKey));
        CGSize keyboardSize = result.RectangleFValue.Size;
        if (Element != null)
        {
            Element.Margin = new Thickness(0, 0, 0, keyboardSize.Height); //push the entry up to keyboard height when keyboard is activated

        }
    }

    private void OnKeyboardHide(object sender, UIKeyboardEventArgs args)
    {
        if (Element != null)
        {
            Element.Margin = new Thickness(0); //set the margins to zero when keyboard is dismissed
        }

    }


    private void UnregisterForKeyboardNotifications()
    {
        if (keyboardShowObserver != null)
        {
            keyboardShowObserver.Dispose();
            keyboardShowObserver = null;
        }

        if (keyboardHideObserver != null)
        {
            keyboardHideObserver.Dispose();
            keyboardHideObserver = null;
        }
    }
}

public class KeyboardView: Grid
{

}
  

На моей странице

 <controls:KeyboardView Padding="0,60,0,0"
                        VerticalOptions="FillAndExpand">
    <Grid RowSpacing="0" ColumnSpacing="0">
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <ListView Grid.Row="0">
            <!--TODO -->
        </ListView>

        <Grid Grid.Row="1" RowSpacing="0" ColumnSpacing="0">
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>

                <StackLayout   Orientation="Horizontal">
                    <ScrollView HorizontalOptions="FillAndExpand" >
                        <Editor  
                                AutoSize="TextChanges"
                                Text="{Binding MyText, Mode=TwoWay}" 
                                Margin="10"  
                                TextColor="Black" 
                                Keyboard="Chat"  
                                BackgroundColor="Gainsboro"
                                HorizontalOptions="FillAndExpand" 
                                VerticalOptions="FillAndExpand"
                                PlaceholderColor="LightGray"
                                Placeholder="Type your message here" />
                    </ScrollView>
                    <StackLayout HorizontalOptions="End" VerticalOptions="End">
                        <Button Text="Send"  Command="{Binding TODOCommand}"  Margin="0,10,10,10"/>
                    </StackLayout>
                </StackLayout>
        </Grid>
    </Grid>
</controls:KeyboardView>
  

Комментарии:

1. Вы загрузили демо-версию и прошли тест?

2. Можете ли вы предоставить свой образец, чтобы я мог протестировать его на своей стороне.

3. @LucasZhang-MSFT загрузил образец проекта github.com/developer9969/KeyboardSpike

4. Я проверю это.

5. @LucasZhang-MSFT очень благодарен!

Ответ №1:

Удаление scrollview устранило проблему