Клавиатура перед моим интерфейсом - PullRequest
0 голосов
/ 11 июня 2018

У меня много записей и меток в интерфейсе, что я могу сделать с прокруткой страницы, если моя клавиатура находится перед каким-либо элементом?Я пытался реализовать прокрутку в моем xaml, но безрезультатно ...

Example of my UIKeyboard problem

1 Ответ

0 голосов
/ 11 июня 2018

У меня была похожая проблема.Лучший способ решить эту проблему - заключить часть входа в систему в виде прокрутки (аналогично тому, что вы уже делаете) и использовать пользовательские средства визуализации:

Android:

[assembly: ExportRenderer(typeof(ModernLogin), typeof(ModernLoginPageRenderer))]
namespace MyApp.Droid.Renderer
{
    public class ModernLoginPageRenderer : PageRenderer
    {
        public ModernLoginPageRenderer(Context context) : base(context)
        {

        }
        protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
        {
            base.OnElementChanged(e);


            // Deactivate SoftInput View Adjustment for this window
            if (e.NewElement != null)
            {
                (this.Context as FormsApplicationActivity).Window.SetSoftInputMode(SoftInput.AdjustResize);             
            }
        }

        protected override void OnWindowVisibilityChanged([GeneratedEnum] ViewStates visibility)
        {
            // Enable SoftInput View Adjustment after moving away from this window
            if (visibility == ViewStates.Gone)
            {
                (this.Context as FormsApplicationActivity).Window.SetSoftInputMode(SoftInput.AdjustPan);
            }
            base.OnWindowVisibilityChanged(visibility);
        }

        protected override void OnLayout(bool changed, int left, int top, int right, int bottom)
        {
            base.OnLayout(changed, left, top, right, bottom);
        }
    }
}

iOS:

[assembly: ExportRenderer(typeof(ModernLogin), typeof(ModernLoginPageRenderer))]

namespace MyApp.iOS.Renderer
{
    public class ModernLoginPageRenderer : PageRenderer
    {
        NSObject observerHideKeyboard;
        NSObject observerShowKeyboard;

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            var cp = Element as ModernLogin;
            if (cp != null)
            {
                foreach (var g in View.GestureRecognizers)
                {
                    g.CancelsTouchesInView = true;
                }
            }
        }

        public override void ViewWillAppear(bool animated)
        {
            base.ViewWillAppear(animated);

            observerHideKeyboard = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.WillHideNotification, OnKeyboardNotification);
            observerShowKeyboard = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.WillShowNotification, OnKeyboardNotification);
        }

        public override void ViewWillDisappear(bool animated)
        {
            base.ViewWillDisappear(animated);

            NSNotificationCenter.DefaultCenter.RemoveObserver(observerHideKeyboard);
            NSNotificationCenter.DefaultCenter.RemoveObserver(observerShowKeyboard);
        }

        void OnKeyboardNotification(NSNotification notification)
        {
            if (!IsViewLoaded) return;

            var frameBegin = UIKeyboard.FrameBeginFromNotification(notification);
            var frameEnd = UIKeyboard.FrameEndFromNotification(notification);

            var page = Element as ModernLogin;
            if (page != null)
            {
                var padding = page.Padding;
                page.Padding = new Thickness(padding.Left, padding.Top, padding.Right, padding.Bottom + frameBegin.Top - frameEnd.Top);
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...