我有一些代码,如果文本框被键盘覆盖,我会向上滚动视图。我正在使用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;
}
答案 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