在 iPhone 上,我发现当键盘出现时,系统会将contentInset
tableView 设置为UIEdgeInsets(0, 0, 216, 0)
,因为键盘高度是 216。我认为这在为最新的 iOS 设计应用程序时很方便,过去我必须计算 tableView 大小当键盘自己出现时。
但是我必须支持iOS5,所以我想知道如何为我禁用这个自动“青睐”?如果我设置
self.searchTipsController.tableView.contentInset = UIEdgeInsetsZero;
,滚动指示器将不会显示。最后我必须检测系统版本来单独处理它。
我想知道这个功能是从哪个版本开始的?6.0 还是 6.1?
- (void) keyboardSizeChange:(NSNotification *)aNotification
{
NSDictionary* d = [aNotification userInfo];
CGRect r = [[d objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
if(r.origin.y<[UIScreen mainScreen].bounds.size.height)
{
CGRect convertRect = [self.view convertRect:r fromView:[UIApplication sharedApplication].keyWindow];
CGRect viewBounds = self.view.bounds;
CGRect tipsFrame = CGRectMake(0, 0, viewBounds.size.width, convertRect.origin.y);
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.1"))
{
}else
{
self.searchTipsController.view.frame = tipsFrame;
self.searchTipsController.tableView.contentInset = UIEdgeInsetsZero;
}
}
}
我更改了我的代码,当键盘抬起时,删除 tableview 然后将其添加回来,这一次看起来正确..
- (void) keyboardSizeChange:(NSNotification *)aNotification
{
NSDictionary* d = [aNotification userInfo];
CGRect r = [[d objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
if(r.origin.y<[UIScreen mainScreen].bounds.size.height)
{
CGRect convertRect = [self.view convertRect:r fromView:[UIApplication sharedApplication].keyWindow];
CGRect viewBounds = self.view.bounds;
CGRect tipsFrame = CGRectMake(0, 0, viewBounds.size.width, convertRect.origin.y);
self.searchTipsController.view.frame = tipsFrame;
self.searchTipsController.tableView.contentInset = UIEdgeInsetsZero;
[self.searchTipsController.view removeFromSuperview];
[self.view addSubview:self.searchTipsController.view];
}
}
不过还是希望有人能回答我的问题,谢谢。