键盘在iOS6下只显示部分

4

我在解决我的应用中为什么键盘部分地出现或完全不出现的问题上卡住了。 它只是一个简单的视图控制器呈现的;

[self presentViewController:vc_browser animated:YES completion:^{}];

第一次呈现它时,一切正常。然后我用 dismiss 将其关闭。
[self dismissModalViewControllerAnimated:NO];

再次呈现时出现了这个问题。从通知中记录键盘框架如下:

2012-12-30 00:40:21.618 test[12080:907] 原始键盘框架 {{160, 443}, {0, 44}}

2012-12-30 00:40:21.619 test[12080:907] 转换后键盘框架 {{320, 886}, {0, 88}}

2012-12-30 00:40:21.836 test[12080:907] 原始键盘框架 {{0, 524}, {320, 44}}

2012-12-30 00:40:21.837 test[12080:907] 转换后键盘框架 {{0, 1048}, {640, 88}}

在下图中,焦点位于webView内(实际上是Google搜索字段)

如果将焦点移动到键盘框架上方的文本字段,则记录的矩形为{{inf,inf},{0,0}}

未实现viewWillAppear和viewDidAppear

以以下方式加载呈现的视图控制器

_vc = [[VC alloc] initWithNibName:@"VC" bundle:nil];

我已尝试从其他xib或其他storyboard加载此视图控制器,但问题仍然存在。希望能得到帮助解决这个问题。谢谢。

http://i.stack.imgur.com/xBNZt.png

无法在声望值小于10的情况下发布图片。

可能没有关系,但https://dev59.com/zWjWa4cB1Zd3GeqPvOiE可能会有所帮助。我也注意到iOS 6中的一些奇怪情况发生在Modal中。 - Warren Burton
@WarrenBurton 是的,行为似乎是一样的,但 [window makeKeyAndVisible] 没有帮助:\ 继续寻找答案... - Stanislav S.
1个回答

4
我也遇到了同样的问题。我不知道如何在您的问题下发表评论(我还是Stack Overflow的新手),所以我提供了我目前发现的部分答案。仍在研究完整解决方案。
使用Xcode 4.5.1,我的应用程序使用iOS 6。它是一个使用Core Data的通用应用程序,iPhone端正常工作。iPad端是一个分割视图。从详细视图控制器,用户可以打开一个全屏窗口来显示照片。关闭照片视图后,您将返回到分割视图。
以下是调用和关闭照片浏览器的代码。
[self presentViewController:photoBrowser animated:YES completion:nil];

[self dismissViewControllerAnimated:YES completion:nil];

在照片查看结束后,我遇到了键盘问题。
症状:随后的视图中,UITextFields或UITextViews不再自动显示键盘,或者键盘仅部分显示,就像您的照片示例一样。我使用becomeFirstResponder来唤起键盘。
[self.noteEdit becomeFirstResponder];

更奇怪的是,如果我点击任何UITextField,则该视图中的所有文本字段都会消失。

我已经为这个问题打开了一个苹果技术支持事件(TSI)。以下是他们在2012年10月12日的回复。

我想给您关于您的事件的更新。感谢您发送您的代码和示例数据库。我已经能够重现这个问题。事实证明,在详细视图控制器中文本字段消失是由于键盘返回无效数据导致您的代码将滚动视图框架设置为无效大小。我正在继续寻找这种意外键盘行为的根本原因,并尽快回信。

我通过显示UIKeyboardFrameEndUserInfoKey userInfo值来验证他的答复。

NSLog(@"keyboardEndFrame orig.x=%f orig.y=%f size.w=%f, size.h=%f",
      keyboardEndFrame.origin.x, keyboardEndFrame.origin.y, keyboardEndFrame.size.width, keyboardEndFrame.size.height);

果然,原点x和y的值都是“inf”。尺寸值被设为零。

现在我只需要知道这一切的原因。还在研究中,如果苹果有回复,我会告诉你的。到目前为止,这个问题让我感到困惑。

PS...我的iPhone和iPad应用程序在iOS 5中运行正常。

更新-2012年10月17日:

我的键盘问题的原因是由于我错误地实现了iOS 6处理方向的新方法。我已经子类化了我的分割视图控制器,包括以下内容:

- (NSUInteger)supportedInterfaceOrientations {
return [[self splitViewController] supportedInterfaceOrientations];}

修改后的代码如下:

- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;}

当我向苹果技术支持申报故障时,他们回复了以下内容,指出了我的问题所在:
在SplitController.m文件中,supportedInterfaceOrientations方法调用[[self splitViewController] supportedInterfaceOrientations]并返回接收到的值。但是,由于不允许在其他分割视图控制器中嵌套分割视图控制器,因此分割视图控制器的splitViewController属性为nil。因此,返回的值为0,这是一个无效的方向掩码。
我的应用程序根据堆栈上的视图类型支持不同的方向类型,但我编写的分割视图控制器有误。
苹果技术支持小组给了我很大的帮助。希望这些信息对您有所帮助。
谢谢!

谢谢!这也解决了我的问题!在我的情况下,问题出在return UIInterfaceOrientationPortrait;而不是return UIInterfaceOrientationMaskPortrait; - Stanislav S.
@JimVision 你真是个救命稻草。我还在努力弄明白,如果返回一个无效的整数,苹果就会说“我们这里不接受这种东西...咔嚓咔嚓”,然后继续摧毁原生键盘。我的意思是,这是你们自己的键盘苹果啊!!!就像我们忘记关冰箱门一样,你们决定用喷灯烧掉它,把房子烧毁。正如古老的谚语所说:“别因为位掩码而扔掉键盘!” - MikeIsrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接