UIKeyboardEventArgs FrameBegin第一次单击后高度返回0

时间:2017-11-07 18:08:40

标签: notifications xamarin.ios uikeyboard eventargs

我有一些代码,如果文本框被键盘覆盖,我会向上滚动视图。我正在使用Xamarin开发人员指南中“UIKeyboard.Notifications.ObserveWillShow”示例中显示的方法样式,其中回调方法是“KeyboardWillShow”。这是我的实施。

if(!spSursa.getSelectedItem().toString().equals(spDestinatie.getSelectedItem().toString()))

我也在监听键盘隐藏时使用Xamarin开发人员指南中的'UIKeyboard.Notifications.ObserveWillHide'示例,其中回调方法是'KeyboardWillHide'。这是我对它的实现。

public void KeyboardWillShow(UIKeyboardEventArgs KeyboardArgs, UIView uiResponderView)
    {
    if (ScrollView != null)
            {
                if (uiResponderView != null)
                {
                    UIEdgeInsets contentInsets = new UIEdgeInsets(0.0f, 0.0f, KeyboardArgs.FrameBegin.Height, 0.0f);
                    ScrollView.ContentInset = contentInsets;
                    ScrollView.ScrollIndicatorInsets = contentInsets;

                    CGRect tableViewRect = ScrollView.Frame;
                    tableViewRect.Height -= KeyboardArgs.FrameBegin.Height;

                    if (!tableViewRect.Contains(uiResponderView.Frame.Location))
                    {
                        ScrollView.ScrollRectToVisible(uiResponderView.Frame, true);
                    }
                }
            }
    }

所有这一切都是第一次没有问题,但随后每次“KeyboardArgs.FrameBegin.Height”都会返回0.有人可以告诉我我缺少的东西吗?

编辑:   我还应该注意到,在“ViewWillDisappear”中,我处理了观察者。

解: 基于Kevin的笔记,我改变了我的'KeyboardWillShow'事件,使用'KeyboardArgs.FrameEnd.Height'而不是'KeyboardArgs.FrameBegin.Height',这个过程没有问题。该事件现在看起来像:

public void KeyBoardWillHide(object sender, UIKeyboardEventArgs args)
    {
        ScrollView.ContentInset = UIEdgeInsets.Zero;
        ScrollView.ScrollIndicatorInsets = UIEdgeInsets.Zero;
    }

1 个答案:

答案 0 :(得分:1)

<强>解决方案:

使用FrameEnd.Height代替FrameBegin.Height

<强>参考文献:

  

<强> UIKeyboardFrameBeginUserInfoKey

     

包含CGRect的NSValue对象的键,用于在屏幕坐标中标识键盘的起始帧矩形。框架矩形反映了设备的当前方向。

     

<强> UIKeyboardFrameEndUserInfoKey

     

包含CGRect的NSValue对象的键,用于标识屏幕坐标中键盘的结束帧矩形。框架矩形反映了设备的当前方向。

Apple的文件: https://developer.apple.com/documentation/uikit/uikeyboardframebeginuserinfokey https://developer.apple.com/documentation/uikit/uikeyboardframeenduserinfokey

其他相关案例:iOS 11 - Keyboard Height is returning 0 in keyboard notification