这只是一个iOS 8问题,键盘在iOS 7中正确显示设备方向更改。我的应用程序支持纵向和横向,并使用自动布局。
如果我将包含UITextField子类的UIViewController子类推送到导航堆栈并且UITextField成为纵向的第一个响应者,则默认键盘会正确显示。但是,如果我将设备旋转到横向,则UIViewController子视图布局会正确显示,但键盘会显示在屏幕的顶部中央。键盘的方向对于横向方向是正确的,但它的框架宽度与纵向方向的预期宽度相同。如果我将应用方向设置为仅横向,则键盘无法正确显示。这只是iOS 8方向更改的一个问题。
答案 0 :(得分:4)
在iOS 8之前,当向应用报告时,键盘的位置和宽度/高度始终相对于纵向方向。 (例如,Landscape的键盘宽度在y方向,在iPad上为~352像素。)
从iOS 8开始,它已更新为在(物理)视图的左上角始终具有(0,0),宽度/高度反映了您通常在iOS之外预期的x / y方向。如果您之前通过keyboardDidShow
的{{1}}之类的方式定位键盘,那么您将获得不太合理的数字。您可以使用这些内容来考虑iOS8之前的特性:
[notification userInfo]
可以重构为......
- (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
}
此外,8.1更新修复了可能与上述更改相关的几个格局/轮换错误。抓住更新,看看是否能解决您的问题。
答案 1 :(得分:3)
这不是iOS8或iPhone 6的错误。这是将旧项目正确迁移到xCode6的问题。
您只需要将Launch screen interface file base name
密钥添加到Info.plist
文件。
此案例的详细说明,您可以找到here。