Xcode 6中新版iOS模拟器指标变化

3

我的应用在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 中似乎已经消失了。
1个回答

2

解决iOS 7中肖像方向宽度和高度的问题 - 希望这能帮助未来进行iOS8迁移的人。

// Called when the UIKeyboardDidShowNotification is sent.
   - (void)keyboardWillShow:(NSNotification*)aNotification
   {
   [self UpdatePatientFromForm];
    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;

    //Account for iOS 7 inversion of height and width
    CGFloat kbHeight = (kbSize.width>kbSize.height)? kbSize.height : kbSize.width;
    CGFloat windowHeight = (self.view.window.frame.size.width>self.view.window.frame.size.height)? self.view.window.frame.size.height : self.view.window.frame.size.width;
    CGFloat visibleScreenHeight = windowHeight - kbHeight;


    if (firstResponderFrame.origin.y+firstResponderFrame.size.height+100-self.scrollView.contentOffset.y > visibleScreenHeight) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.scrollView setContentOffset:CGPointMake(0, firstResponderFrame.origin.y-windowHeight/2+100+firstResponderFrame.size.height/2) animated:YES];
        });   
    }  
}

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