解决tableview 列表键盘弹起输入框遮挡cell问题
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];
}
}
});