Xamarin Forms - iOS 上的键盘覆盖条目(文本字段)
Posted
技术标签:
【中文标题】Xamarin Forms - iOS 上的键盘覆盖条目(文本字段)【英文标题】:Xamarin Forms - Keyboard covers Entry (text field) on iOS 【发布时间】:2018-12-22 23:28:01 【问题描述】:在 Xamarin 表单页面(下面的代码)上,当用户在 android 上点击条目(文本字段)时,屏幕向上移动并出现键盘,这很好。但是,在 ios 键盘上覆盖了条目。在本机开发中,它需要在代码中处理,但是如何在 Xamarin Forms 中解决这个问题?我认为唯一的解决方案是尝试常规 Xamarin 并在那里开发单独的平台代码。
【问题讨论】:
【参考方案1】:将Entry
元素包装在ScrollView
中
【讨论】:
【参考方案2】:为此,您可以在构造函数中使用以下代码:
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);
不要忘记将根布局添加到 ScrollView,正如 @Jason 所提到的。
【讨论】:
【参考方案3】:参考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);
【讨论】:
【参考方案4】:在我的例子中,我使用网格和堆栈,将我的根布局包装在 ScrollView 中,并将方向设置为两者都没有。它可以在没有任何 Nuget 和代码隐藏的情况下工作。 实际上,我尝试了 IQKeyboardManager,但它都不起作用,依赖弃用。 感谢@Jason 的想法。
【讨论】:
请阅读How to Answer和edit你的答案。目前,这是否是问题的答案还不是很清楚。以上是关于Xamarin Forms - iOS 上的键盘覆盖条目(文本字段)的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Forms - 防止键盘在 UWP、Android、iOS 中的条目焦点上显示
Xamarin Forms Picker - iOS 上的“完成”文本
在 iOS 上的 Xamarin.Forms.Maps 中使用 Xamarin.Essentials Geolocation 获取设备位置的奇怪问题