当键盘出现时,iOS 6会自动将contentInset添加到UITableView吗?

时间:2013-05-29 12:33:36

标签: ios objective-c uitableview keyboard

在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];

    }
}

但我仍然希望有人可以回答我的问题,谢谢。

0 个答案:

没有答案