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