Перекрытие клавиатуры на экране входа -Xamarin .forms - PullRequest
1 голос
/ 29 мая 2019

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

Что я получаю

enter image description here

Что я хочу

enter image description here

Мой Xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"          
             BackgroundColor="#173F5F"           
             x:Class="app.Login">
    <ScrollView>
        <RelativeLayout>
            <Image Source="backgrnd.png" Aspect="Fill"
                RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width}"
                RelativeLayout.HeightConstraint=     "{ConstraintExpression Type=RelativeToParent, Property=Height}"/>
            <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"  RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width}"
             RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height}">
                <StackLayout Orientation="Vertical"  VerticalOptions="StartAndExpand" Margin="15,30,15,0">
                    <Image Source="logo.png" HorizontalOptions="Center" VerticalOptions="Center" HeightRequest="150" WidthRequest="150"></Image>
                    <Image Source="backlogo.png" HorizontalOptions="Center" VerticalOptions="Center" ></Image>
                </StackLayout>
                <StackLayout VerticalOptions="End"  Margin="15,0,15,50"  >
                    <Frame  BackgroundColor="Snow" OutlineColor="Snow" HasShadow="True"  HorizontalOptions="FillAndExpand"  Padding="10,10,10,10" 
                            CornerRadius="5"                             
                                Margin="15,10,15,0">
                        <StackLayout VerticalOptions="End" >
                            <StackLayout Orientation="Horizontal">
                                <Image Source="userlogo.png" HorizontalOptions="Start" HeightRequest="30" WidthRequest="30"></Image>
                                <Entry TextColor="Black" 
                        x:Name="userName"
                        PlaceholderColor="Gray" 
                        ReturnType="Next"
                        BackgroundColor="Snow"                        
                        Placeholder="User ID" 
                        VerticalOptions="Center"
                        HorizontalOptions="FillAndExpand"/>
                            </StackLayout>
                            <StackLayout Orientation="Horizontal">
                                <Image Source="locklogo.png" HorizontalOptions="Start" HeightRequest="30" WidthRequest="30"></Image>
                                <Entry TextColor="Black" 
                         PlaceholderColor="Gray"                              
                        x:Name="password"                      
                        BackgroundColor="Snow"
                        VerticalOptions="Center"
                        Placeholder="Password"
                        IsPassword="true"
                        HorizontalOptions="FillAndExpand"/>                                
                            </StackLayout>                            
                            <Grid>
                                <Button x:Name="LoginButton" BackgroundColor="#4080a6" TextColor="White" Text="Sign In" Clicked="Login_Clicked"  BorderRadius="7" BorderColor="#4080a6" BorderWidth = "2" HorizontalOptions="FillAndExpand" />                               
                            </Grid>
                        </StackLayout>
                    </Frame>
                </StackLayout>
            </StackLayout>
        </RelativeLayout>
    </ScrollView>
</ContentPage>

Я пытался Xam.Plugins.Forms.KeyboardOverlap , но это не решило мою проблему. Любая помощь приветствуется.

1 Ответ

1 голос
/ 29 мая 2019

Посмотрите на ответ здесь Я попробовал вариант 2 на Android, и он отлично работает.

Для вашего случая, попробуйте добавить этот код на вашу страницу класса

  protected override void OnAppearing()
    {
        base.OnAppearing();
        userName.Focused += InputFocused;
        password.Focused += InputFocused;
        userName.Unfocused += InputUnfocused;
        password.Unfocused += InputUnfocused;
    }

    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        userName.Focused -= InputFocused;
        password.Focused -= InputFocused;
        userName.Unfocused -= InputUnfocused;
        password.Unfocused -= InputUnfocused;
    }
    void InputFocused(object sender, EventArgs args)
    {
        Content.LayoutTo(new Rectangle(0, -270, Content.Bounds.Width, Content.Bounds.Height));
    }

    void InputUnfocused(object sender, EventArgs args)
    {
        Content.LayoutTo(new Rectangle(0, 0, Content.Bounds.Width, Content.Bounds.Height));
    }

Обновление

этот код должен работать как на Android, так и на IOS

enter image description here

...