首页 > 解决方案 > 编辑器和键盘重叠 (iOS) Xamarin forms 3.6 无法正常工作 (Visual=Material)

问题描述

我看到一个奇怪的行为,或者我这样做的方式可能完全错误。

有一个底部有一个编辑器的页面,一个按钮和一个顶部有一些消息的列表视图。

我在这个链接中使用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>

标签: xamarin.formsxamarin.ios

解决方案


删除滚动视图对问题进行了排序


推荐阅读