Xamarin Forms-iOS上的键盘覆盖输入(文本字段)

时间:2018-07-15 00:58:10

标签: xamarin xamarin.forms xamarin.ios xamarin.android xamarin-studio

在Xamarin Forms页面(以下代码)上,当用户在Android上点击Entry(文本字段)时,屏幕向上移动,并且出现键盘,这很好。但是,iOS上的键盘覆盖了Entry。在本机开发中,它需要用代码处理,但是如何在Xamarin Forms中解决此问题?我认为唯一的解决方案是尝试常规Xamarin并在那里开发单独的平台代码。

4 个答案:

答案 0 :(得分:1)

Entry元素包装到ScrollView

答案 1 :(得分:0)

为此,您可以在构造函数中使用以下代码:

    public YourPage()
    {
        InitializeComponent();
        this.yourEntry.Focused += (s, e) => { SetLayoutPosition(onFocus: true); };
        this.yourEntry.Unfocused += (s, e) => { SetLayoutPosition(onFocus: false); };            
    }

实施方法:

void SetLayoutPosition(bool onFocus)
    {
        if (onFocus)
        {
            if (Device.RuntimePlatform == Device.iOS)
            {
                this.CenterStackLayout.TranslateTo(0, -100, 50);
            }
        }
        else
        {
            if (Device.RuntimePlatform == Device.iOS)
            {
                this.CenterStackLayout.TranslateTo(0, 0, 50);
            }
        }
    }

别忘了像@Jason所说的那样,将您的Root Layout添加到ScrollView中。

答案 2 :(得分:0)

引用https://forums.xamarin.com/discussion/151812/ios-keyboard-overlapping-entry

下面的库解决了我的问题。 https://github.com/TheEightBot/Xamarin.IQKeyboardManager

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    global::Xamarin.Forms.Forms.Init();

    IQKeyboardManager.SharedManager.Enable = true;

    LoadApplication(new App());

    return base.FinishedLaunching(app, options);
}

答案 3 :(得分:0)

就我而言,我使用网格和堆栈,将我的根布局包装在 ScrollView 中,并将方向设置为两者都不是。它无需任何 Nuget 和代码隐藏即可工作。 实际上,我尝试了 IQKeyboardManager,但没有一个有效,依赖项弃用。 感谢@Jason 的想法。