在iPhone上,我发现当键盘出现时,系统会将tableView的contentInset
设置为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];
}
}
但我仍然希望有人可以回答我的问题,谢谢。