Mob*_*v98 5 xcode objective-c autolayout swift ios8
这只是一个iOS 8问题,键盘在iOS 7中正确显示设备方向更改.我的应用程序支持纵向和横向,并使用自动布局.
如果我将包含UITextField子类的UIViewController子类推送到导航堆栈并且UITextField成为纵向的第一个响应者,则默认键盘会正确显示.但是,如果我将设备旋转到横向,则UIViewController子视图布局会正确显示,但键盘会显示在屏幕的顶部中央.键盘的方向对于横向方向是正确的,但它的框架宽度与纵向方向的预期宽度相同.如果我将应用方向设置为仅横向,则键盘无法正确显示.这只是iOS 8方向更改的问题.
在 iOS 8 之前,当向应用程序报告时,键盘的位置和宽度/高度始终相对于纵向方向。(例如,横向的键盘宽度在 y 方向上,在 iPad 上约为 352 像素。)从 iOS 8 开始,这已更新为始终在(物理)视图的左上角显示 (0,0),并且宽度/高度反映了您在 iOS 之外通常期望的 x/y 方向。如果您之前通过keyboardDidShow's之类的方式定位键盘[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
}
Run Code Online (Sandbox Code Playgroud)
可以重构为...
- (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
}
Run Code Online (Sandbox Code Playgroud)
此外,8.1 更新修复了几个可能与上述更改相关的横向/旋转错误。获取更新并查看是否可以解决您的问题。
| 归档时间: |
|
| 查看次数: |
3991 次 |
| 最近记录: |