Когда я сосредотачиваюсь на этом Editor
, клавиатура перекрывает Editor
и Button
. Я знаю, что есть решение: разместить элементы внутри ScrollView
, но это решение создает огромные проблемы с прокруткой ListView
внутри ScrollView
. Что мне делать, чтобы он работал нормально?
Макет:
красный - ScrollView
,
зеленый - ListView
,
синий - StackLayout
с 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"