我的应用在iPad Retina模拟器上使用Xcode 5运行良好,但是当我在iPad Retina模拟器上使用Xcode 6运行相同的项目时,这段代码:
UIView *firstResp = [self.view findFirstResponder];
CGRect firstResponderFrame = [firstResp convertRect:firstResp.bounds toView:self.view];
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
if (firstResponderFrame.origin.y+firstResponderFrame.size.height+40-self.scrollView.contentOffset.y > self.view.window.frame.size.width-kbSize.width) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.scrollView setContentOffset:CGPointMake(0, firstResponderFrame.origin.y-self.view.window.frame.size.width/2+100+firstResponderFrame.size.height/2) animated:YES];
});
}
基本上这段代码是在键盘出现时执行的,以使视图居中。但现在它表现得很差;有些时候键盘甚至没有显示出来。 Xcode 6 中没有显示任何错误。从我最初测试不同框架的结果看,度量值似乎相同。我使用 NSNotification 监听键盘:也许这就是原因? 这段代码也在另一个 VC 中的容器 VC 内的视图控制器中。 这不是非常具体的问题,但我很好奇为什么它不起作用。我在 iOS 7.1 上运行,Xcode 的两个版本都是如此。Xcode 6 中的模拟器在窗口标题栏中显示 iOS 8,但我的应用程序配置为在 iOS 7.1 上运行。
**
编辑:
** NVM.. 找到了。在 IOS 7 中存在一个 bug,导致高度和宽度保持不变,即使方向已经改变,据我所知,发生在 view.window.frame 和键盘大小上。这个 bug 在 iOS 8 中似乎已经消失了。