2014-10-09 75 views
5

这只是iOS 8的问题,键盘在iOS 7中正确显示并且设备方向更改。我的应用程序支持纵向和横向,并使用自动布局。iOS 8方向更改:键盘框无法正确显示

如果我将包含UITextField子类的UIViewController子类推入导航堆栈,并且UITextField成为纵向方向的第一响应者,则默认键盘将正确显示。但是,如果我将设备旋转到横向,则UIViewController子视图布局将正确显示,但键盘显示在屏幕的顶部中心。键盘的方向对于横向方向是正确的,但是其纵向宽度与纵向方向的预期宽度相同。如果我将应用程序方向设置为仅横向方向,则键盘无法正确显示。这只是iOS 8方向改变的一个问题。

+2

我在想这可能是一个iPhone 6的错误。 – MobileDev98 2014-10-09 01:08:24

回答

4

在iOS 8之前,当向应用程序报告时,键盘的位置和宽度/高度总是与纵向相对。 (例如,Landscape的键盘宽度在y方向,在iPad上约为352像素。) 从iOS 8开始,已更新为始终在您的(物理)视图的左上角具有(0,0),宽度/高度反映了您通常在iOS以外期望的x/y方向。如果你以前通过keyboardDidShow[notification userInfo]这样的东西定位你的键盘,你会得到一些不太合理的数字。您可以使用的东西沿着这些路线考虑到预iOS8上的特质:

- (void)keyboardDidShow: (NSNotification *) notification{ 

    NSDictionary *keyboardInfo = [notification userInfo]; 
    CGSize keyboardSize = [[keyboardInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    float height, width; 
    if(UIInterfaceOrientationIsPortrait(orientation)){ 
     width = keyboardSize.width; 
     height = keyboardSize.height; 
    } else { 
     if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1){ 
      width = keyboardSize.height; 
      height = keyboardSize.width; 
     } else { 
      width = keyboardSize.width; 
      height = keyboardSize.height; 
     } 
    } 

    // Remainder of function 
} 

其中可重构下来......

- (void)keyboardDidShow: (NSNotification *) notification{ 

    NSDictionary *keyboardInfo = [notification userInfo]; 
    CGSize keyboardSize = [[keyboardInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    float width = keyboardSize.width; 
    float height = keyboardSize.height; 
    if(!UIInterfaceOrientationIsPortrait(orientation) && (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1)){ 
     width = keyboardSize.height; 
     height = keyboardSize.width; 
    } 

    // Remainder of function 
} 

此外,8.1更新修正了几个景观/旋转错误可能与上述更改有关。抓住更新,看看是否解决了你的问题。

3

它不是iOS8或iPhone 6的错误。它是旧项目正确迁移到xCode6的问题。

您只需将Launch screen interface file base name键添加到Info.plist文件即可。

详细解释这种情况下你可以找到here