Клавиатура перекрывается редактором в Xamarin.Forms на iOS - PullRequest
0 голосов
/ 31 октября 2018

Когда я фокусирую это Editor, клавиатура перекрывается Editor и Button. Я знаю, что есть решение: поместить элементы внутрь ScrollView, но это решение создает огромные проблемы с прокруткой ListView внутри ScrollView. Что я должен сделать, чтобы это работало правильно?

Компоновка: красный - ScrollView, зеленый - ListView, синий - StackLayout с Editor и Button.

enter image description here

Вот видео, как это работает: https://streamable.com/wvd3h

Решение №2 - использовать Xamarin.Forms.Plugins - KeyboardOverlap, но у этого плагина есть проблема с панелью вкладок на TabbedPage

1 Ответ

0 голосов
/ 31 октября 2018

Вместо использования прокрутки вы можете создать пользовательский рендерер 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...