Xcode 5 和 iOS 8 键盘滚动不工作
Xcode 5 and iOS 8 keyboard scroll not working
直截了当地说,当我使用 Xcode 6 构建我的项目时,当键盘即将显示时,屏幕上的组件会正确向上滚动。
但是,当我使用 Xcode 5 构建时,所有组件都离开了屏幕(也就是它们移动得太高)。我搜索了但找不到问题。
此问题仅在 iOS 8 横向模式下出现。在 iOS 7 上一切正常。有谁知道问题出在哪里?由于某些原因,必须使用 Xcode 5 进行构建。
谢谢!
创建视图时
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardShown:) name:UIKeyboardWillShowNotification object:nil];
事件处理程序
- (void)keyboardShown:(NSNotification *)notification{
CGSize kbSize = [[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
float kbHeight = UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) ? kbSize.height : kbSize.width;
if( [[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) kbHeight = kbSize.height;
_origScrollIndicatorInsets = _legsTableView.scrollIndicatorInsets;
_origContentInset = _legsTableView.contentInset;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbHeight, 0.0);
_legsTableView.contentInset = contentInsets;
_legsTableView.scrollIndicatorInsets = contentInsets;
if (_activeTextField) {
CGRect fieldRect = [_legsTableView convertRect:_activeTextField.bounds fromView:_activeTextField];
[_legsTableView scrollRectToVisible:fieldRect animated:YES];
}
}
在 Xcode 6 中创建和使用的项目并不总是与 Xcode 5 兼容。有些事情发生了变化,例如 Xcode 6 的故事板和自动布局。我看不出有任何理由需要它内置于 Xcode 5,我假设您正在寻找向后兼容性。然后您可以更改该应用程序的部署目标。如果将其更改为 7 或更旧的 iOS,您将看到它如何在更旧的 iOS 上运行,但仍使用最新版本构建。
从这个 post 我找到了计算高度的答案,而且效果很好。
keyboard height varies in ios8
- (void)keyboardWillShow:(NSNotification*)note {
NSDictionary* info = [note userInfo];
CGSize _kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
float kbHeight = _kbSize.width > _kbSize.height ? _kbSize.height : _kbSize.width;
}
直截了当地说,当我使用 Xcode 6 构建我的项目时,当键盘即将显示时,屏幕上的组件会正确向上滚动。
但是,当我使用 Xcode 5 构建时,所有组件都离开了屏幕(也就是它们移动得太高)。我搜索了但找不到问题。
此问题仅在 iOS 8 横向模式下出现。在 iOS 7 上一切正常。有谁知道问题出在哪里?由于某些原因,必须使用 Xcode 5 进行构建。 谢谢!
创建视图时
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardShown:) name:UIKeyboardWillShowNotification object:nil];
事件处理程序
- (void)keyboardShown:(NSNotification *)notification{
CGSize kbSize = [[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
float kbHeight = UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) ? kbSize.height : kbSize.width;
if( [[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) kbHeight = kbSize.height;
_origScrollIndicatorInsets = _legsTableView.scrollIndicatorInsets;
_origContentInset = _legsTableView.contentInset;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbHeight, 0.0);
_legsTableView.contentInset = contentInsets;
_legsTableView.scrollIndicatorInsets = contentInsets;
if (_activeTextField) {
CGRect fieldRect = [_legsTableView convertRect:_activeTextField.bounds fromView:_activeTextField];
[_legsTableView scrollRectToVisible:fieldRect animated:YES];
}
}
在 Xcode 6 中创建和使用的项目并不总是与 Xcode 5 兼容。有些事情发生了变化,例如 Xcode 6 的故事板和自动布局。我看不出有任何理由需要它内置于 Xcode 5,我假设您正在寻找向后兼容性。然后您可以更改该应用程序的部署目标。如果将其更改为 7 或更旧的 iOS,您将看到它如何在更旧的 iOS 上运行,但仍使用最新版本构建。
从这个 post 我找到了计算高度的答案,而且效果很好。 keyboard height varies in ios8
- (void)keyboardWillShow:(NSNotification*)note {
NSDictionary* info = [note userInfo];
CGSize _kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
float kbHeight = _kbSize.width > _kbSize.height ? _kbSize.height : _kbSize.width;
}