![](/img/trans.png)
[英]Is there a way with Xamarin.Forms to detect the software keyboard in my iOS app?
[英]Keyboard overlaps Editor in Xamarin.Forms on iOS
當我聚焦那個Editor
,一個鍵盤與Editor
和Button
重疊。 我知道,有一個解決方案:將元素放在ScrollView
,但是這個解決方案在ScrollView
滾動ListView
會產生很大的問題。 我該怎么做才能使其正常工作?
布局:紅色 - ScrollView
,綠色 - ListView
,藍色 - StackLayout
with Editor
和Button
。
這是其工作原理的視頻: https : //streamable.com/wvd3h
解決方案#2 是使用 Xamarin.Forms.Plugins - KeyboardOverlap,但是這個插件在 TabbedPage 上的標簽欄有問題
您可以創建一個自定義的 iOS 渲染器,而不是使用滾動視圖,在鍵盤處於活動狀態時向上移動您的視圖(使用邊距)。
一個例子可以在這里看到: https : //github.com/rdelrosario/ChatUIXForms/blob/master/ChatUIXForms.iOS/Renderers/ChatEntryRenderer.cs
相關代碼:
void RegisterForKeyboardNotifications()
{
if (_keyboardShowObserver == null)
_keyboardShowObserver = UIKeyboard.Notifications.ObserveWillShow(OnKeyboardShow);
if (_keyboardHideObserver == null)
_keyboardHideObserver = UIKeyboard.Notifications.ObserveWillHide(OnKeyboardHide);
}
void OnKeyboardShow(object sender, UIKeyboardEventArgs args)
{
NSValue result = (NSValue)args.Notification.UserInfo.ObjectForKey(new NSString(UIKeyboard.FrameEndUserInfoKey));
CGSize keyboardSize = result.RectangleFValue.Size;
if (Element != null)
{
Element.Margin = new Thickness(0, 0, 0, keyboardSize.Height); //push the entry up to keyboard height when keyboard is activated
}
}
void OnKeyboardHide(object sender, UIKeyboardEventArgs args)
{
if (Element != null)
{
Element.Margin = new Thickness(0); //set the margins to zero when keyboard is dismissed
}
}
void UnregisterForKeyboardNotifications()
{
if (_keyboardShowObserver != null)
{
_keyboardShowObserver.Dispose();
_keyboardShowObserver = null;
}
if (_keyboardHideObserver != null)
{
_keyboardHideObserver.Dispose();
_keyboardHideObserver = null;
}
}
在 Android 上,這可能不是問題,但如果是,您可以嘗試
android:Application.WindowSoftInputModeAdjust="Resize"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.