Как реализовать «Мягкий режим ввода с клавиатуры» и исправить проблему наложения клавиатуры в Xamarin.Forms iOS? - PullRequest
1 голос
/ 25 марта 2020

У меня возникла проблема с реализацией "Мягкого режима ввода с клавиатуры" и исправлением проблемы наложения клавиатуры в приложении Xamarin.Forms iOS.

Следующие решения, которые я пробовал:

  • Представление прокрутки: что не работает для меня, потому что я уже использую одно представление прокрутки на своей странице содержимого, поэтому вложенная прокрутка представление не будет работать так, как определено в следующей статье https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/scroll-view.

  • Xamarin.IQKeyboardManager: которая решает проблему наложения, но скрывает верхний контент, поднимая его который я не смогу прокрутить вниз.

Я также пробовал следующие статьи

Также сталкивается с другой проблемой без «Режима ввода с мягкой клавиатуры», когда иногда появляются пустые пробелы сверху и снизу при фокусировке на элементе управления вводом, который запускает клавиатуру вверх и вниз при нескольких нажатиях.

Следующие макеты страниц, которые я использую на двух своих страницах (в связи с проблемой на 2 страницах, которая уже используется в режиме прокрутки)

Page 1:

`<ContentPage.Content>
            <StackLayout >
                <ScrollView Margin="10,10,10,0">
                    <StackLayout x:Name="pageContentLayout">
                    </StackLayout>
                </ScrollView>
                <AbsoluteLayout HorizontalOptions="FillAndExpand" 
                                VerticalOptions="FillAndExpand">
                    <StackLayout x:Name="mainEntryLayout" 
                                 AbsoluteLayout.LayoutFlags="All" 
                                 AbsoluteLayout.LayoutBounds="0,0,1,1">
                        <ActivityIndicator x:Name="entryIndicator" 
                                   IsVisible="False" 
                                   IsRunning="False">
                        </ActivityIndicator>
                        <Grid VerticalOptions="EndAndExpand" 
                          HorizontalOptions="EndAndExpand"
                          x:Name="entryGrid" 
                          BackgroundColor ="{StaticResource Color}">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="85*"/>
                                <ColumnDefinition Width="15*"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="60"/>
                            </Grid.RowDefinitions>
                            <custom:CustomEntry CornerRadius="4"  
                                                IsCurvedCornersEnabled="True"  
                                                BorderColor="{StaticResource Color}"                     
                                                PlaceholderColor="{StaticResource Color}"                     
                                                TextColor="{StaticResource Color}"   
                                                VerticalOptions="FillAndExpand" 
                                                HeightRequest="100"
                                                HorizontalOptions="FillAndExpand" 
                                                Grid.Column="0" 
                                                FontSize="12"                   
                                                BackgroundColor ="{StaticResource Color}"
                                                x:Name="commentCustomEntry"
                                                Keyboard="Chat"                 
                                                Margin="10"/>
                            <ImageButton VerticalOptions="CenterAndExpand" 
                                         HorizontalOptions="CenterAndExpand"                                                     
                                         Grid.Column="1"
                                         HeightRequest="30" 
                                         WidthRequest="30" 
                                         x:Name="SendBtn"
                                         BackgroundColor="Transparent"/>
                        </Grid>
                    </StackLayout>
                    <StackLayout x:Name="pageIndicatorLayout" 
                                 IsVisible="false"                              
                                 AbsoluteLayout.LayoutFlags="PositionProportional"
                                 AbsoluteLayout.LayoutBounds="0.5,0.5,-1,-1">
                        <Label x:Name="loadingLabel" TextColor="{StaticResource Color}"/>
                        <ActivityIndicator IsRunning="true" 
                                           Color ="{DynamicResource Color}"/>
                    </StackLayout>
                </AbsoluteLayout>
            </StackLayout>
        </ContentPage.Content>
    `


Page 2:



`
    <StackLayout>
            <AbsoluteLayout HorizontalOptions="FillAndExpand" 
                                VerticalOptions="FillAndExpand">
                <StackLayout x:Name="pageContentLayout" 
                                 AbsoluteLayout.LayoutFlags="All" 
                                 AbsoluteLayout.LayoutBounds="0,0,1,1">
                    <StackLayout x:Name="ImgLayout" ></StackLayout>
                    <ScrollView>
                        <StackLayout>
                            <StackLayout Orientation="Vertical"  
                                         HorizontalOptions="FillAndExpand">
                                <Label Text="{Binding titleLable}" 
                                       FontAttributes="Bold" 
                                       TextColor="{StaticResource Color}" 
                                       Margin="10, 0, 0, 0" 
                                       FontSize="14"/>
                                <Label x:Name="resourceLabel"
                                       TextColor="{StaticResource Color}" 
                                       FontSize="11" 
                                       Margin="10, 0, 0, 0" />
                                <Label Text="{Binding sourceLabel}" 
                                       TextColor="{StaticResource Color}" 
                                       FontSize="11" 
                                       FontAttributes="Bold" 
                                       Margin="10, 0, 0, 0" />
                                <Label x:Name="personLabel"
                                       TextColor="{StaticResource Color}" 
                                       FontSize="11" 
                                       Margin="10, 0, 0, 0" />
                                <Label FontAttributes="Bold, Italic"    
                                   FontSize="12" 
                                   Padding="10,10,10,0"
                                   Text="{Binding hightlightLabel}"/>
                            </StackLayout>
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="*"/>
                                </Grid.RowDefinitions>
                                <local:ExtendedWebViewModel x:Name="webContentView"
                                                        Grid.Row="0"
                                                        HorizontalOptions="FillAndExpand"
                                                        VerticalOptions="FillAndExpand"/>
                            </Grid>
                        </StackLayout>
                    </ScrollView>
                    <Grid Padding="10,0,10,0" RowSpacing="1">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="60*"/>
                            <ColumnDefinition Width="40*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>                    
                        <StackLayout Grid.Column="1"
                                     Grid.Row="0"
                                     Grid.RowSpan="2"
                                     Orientation="Horizontal" 
                                     HorizontalOptions="EndAndExpand"
                                     VerticalOptions="CenterAndExpand">
                            <Image Source="{Binding lImg, Converter={StaticResource Converter}}"
                                                   HeightRequest="20" 
                                                   WidthRequest="20">
                                <Image.GestureRecognizers>
                                    <TapGestureRecognizer Tapped="OnLImgTapped" 
                                                                          CommandParameter="{Binding item}"/>
                                </Image.GestureRecognizers>
                            </Image>
                            <Label x:Name="tCount" 
                                                   VerticalOptions="CenterAndExpand"
                                                   Text="{Binding tCount}" 
                                                   FontSize="12">
                                <Label.GestureRecognizers>
                                    <TapGestureRecognizer Tapped="OntCountTapped" 
                                                                          CommandParameter="{Binding item}"/>
                                </Label.GestureRecognizers>
                            </Label>
                            <Image Source="{Binding cImg, Converter={StaticResource Converter}}"
                                                   HeightRequest="20" 
                                                   WidthRequest="20">
                                <Image.GestureRecognizers>
                                    <TapGestureRecognizer Tapped="OnCImgTapped" 
                                                                          CommandParameter="{Binding item}"/>
                                </Image.GestureRecognizers>
                            </Image>
                            <Label Text="{Binding cCount}"
                                                   VerticalOptions="CenterAndExpand"
                                                   FontSize="12">
                                <Label.GestureRecognizers>
                                    <TapGestureRecognizer Tapped="OnCCountTapped" 
                                                                          CommandParameter="{Binding item}"/>
                                </Label.GestureRecognizers>
                            </Label>
                            <Image Source="{Binding SImg, Converter={StaticResource Converter}}"
                                                   HeightRequest="20" 
                                                   WidthRequest="20">
                                <Image.GestureRecognizers>
                                    <TapGestureRecognizer Tapped="OnSImgTapped" 
                                                                          CommandParameter="{Binding item}"/>
                                </Image.GestureRecognizers>
                            </Image>
                        </StackLayout>
                    </Grid>
                    <Grid VerticalOptions="EndAndExpand" 
                          HorizontalOptions="EndAndExpand"
                          x:Name="entryGrid" 
                          BackgroundColor ="{StaticResource Color}">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="85*"/>
                            <ColumnDefinition Width="15*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="60"/>
                        </Grid.RowDefinitions>
                        <custom:CustomEntry CornerRadius="4"  
                                                IsCurvedCornersEnabled="True"  
                                                BorderColor="{StaticResource Color}"                     
                                                PlaceholderColor="{StaticResource Color}"
                                                TextColor="{StaticResource CommentEntryValueColor}"   
                                                VerticalOptions="FillAndExpand" 
                                                HeightRequest="100"
                                                HorizontalOptions="FillAndExpand" 
                                                Grid.Column="0"                        
                                                FontSize="12"                   
                                                BackgroundColor ="Color"
                                                x:Name="commentCustomEntry"
                                                Keyboard="Chat"                 
                                                Margin="10"/>
                        <ImageButton VerticalOptions="CenterAndExpand" 
                                         HorizontalOptions="CenterAndExpand"Grid.Column="1"
                                         HeightRequest="30" 
                                         WidthRequest="30" 
                                     Clicked="OnSendButtonClicked"
                                         x:Name="SendBtn"
                                         BackgroundColor="Transparent"/>
                    </Grid>
                </StackLayout>
                <StackLayout x:Name="pageIndicatorLayout" 
                                 IsVisible="false" 
                                 Padding="12"
                                 AbsoluteLayout.LayoutFlags="PositionProportional"
                                 AbsoluteLayout.LayoutBounds="0.5,0.5,-1,-1">
                    <Label x:Name="loadingLabel" TextColor="{StaticResource Color}"/>
                    <ActivityIndicator IsRunning="true" 
                                           Color ="{DynamicResource Color}"/>
                </StackLayout>
            </AbsoluteLayout>
        </StackLayout>
`

Не могли бы вы предложить лучшее решение?

Спасибо

1 Ответ

0 голосов
/ 25 марта 2020

Если вы нацелены только на ios, удалите скроллвью и попробуйте этот плагин. https://github.com/paulpatarinski/Xamarin.Forms.Plugins/tree/master/KeyboardOverlap

После установки этого nuget добавьте эти строки в свой класс Appdelegate после Xamarin.Forms.Init().

KeyboardOverlapRenderer.Init ();

Нет необходимости выполнять какие-либо действия после инициализации плагин. Клавиатура больше не будет перекрывать ваши элементы управления !!!

...