解决tableview 列表键盘弹起输入框遮挡cell问题

当键盘弹起时,通过调整UITableView的frame避免输入框被遮挡。方法包括:1) 设置表格视图的高度为键盘上端到导航栏的距离;2) 键盘收起时恢复表格视图高度;3) 检测点击的cell及其下一行在屏幕的位置,如果下一行在键盘下方,则将当前cell滚动到表格视图顶部。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

self.keyBorldH. 是获取的键盘的高度   50 是输入框的高度  64 是导航栏的高度

 

采取的方案

1.=====当键盘弹起时候,,手动设置tableview的frame为导航栏到键盘上端的区域。。

 

self.tableView.frame = CGRectMake(0,0,Width,Height-64-50-self.keyBorldH);

 

2.===== 键盘回收时,,手动设置tableview的frame为导航栏到屏幕低端获取点击的cell在屏幕中的位置

 

self.tableView.frame = CGRectMake(0,0,Width,Height-64-50);

 

3.获取点击的cell的挨着的下一条cell在屏幕中的起始位置,,与输入框的起始位置做比较,,如果挨着的下一条cell的起始位置大于输入框的起始位置(即当前cell的低端),,则认为当前点击的cell会被键盘遮挡,,则当前点击的cell偏移到tableview的最低端(即键盘的上方)。。

 

 / 获取点击的cell的下一个cell在屏幕中的位置。。

       CGRect rectInTableView = [tableView rectForRowAtIndexPath:[NSIndexPathindexPathForRow:indexPath.row+1inSection:indexPath.section]];

       CGRect rect = [tableView convertRect:rectInTableViewtoView:[tableViewsuperview]];

       dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5/*延迟执行时间*/ * NSEC_PER_SEC));

       dispatch_after(delayTime,dispatch_get_main_queue(), ^{

           /// 点击的cell的下一个cell的起始位置与输入框比对,,是否覆盖,,会覆盖则点击的cell偏移到键盘上方,,也是tableview的最低端(注意tableview的frame),,不会覆盖就不偏移

 

 if (indexPath.row == self.pingLunArray.count-1) {

                /// 最后一个cell直接偏移

                [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

            }else{

                if (rect.origin.y>self.keyBordView.origin.y) {

                    [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

                }

            }

 

        });

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值