显示键盘时的iOS UITableView contentOffset

时间:2015-08-07 09:00:16

标签: ios uitableview keyboard

我想在contentOffset出现时设置tableView的{​​{1}}。实际代码位于keyboard内,因为它在整个应用中广泛使用,因此使用CustomTableView : UITableView <UIScrollViewDelegate>作为self。 我的代码如下所示:

tableView

问题在于,当用户点击靠近- (void)keyboadDidAppear:(NSNotification *)notification { NSTimeInterval animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; CGRect keyboardBeginFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; CGFloat keyboardHeight = CGRectGetHeight(keyboardBeginFrame); CGPoint contentOffset = self.contentOffset; originalContentOffset = self.contentOffset;//hold reference to reset it when keyboard is hidden contentOffset.y += keyboardHeight; [UIView animateWithDuration:animationDuration animations:^{ [self layoutIfNeeded]; } completion:^(BOOL finished) { if (finished) { [self setContentOffset:contentOffset animated:YES]; } }]; } 顶部的tableCell时,它总是通过键盘的高度来抵消内容,这是错误的。 理想情况下,我想要偏移内容,以便点击tableView就在键盘上方。 问题是我不知道该怎么做。我有一个粗略的想法,我需要类似的东西:

tableCell

有关如何提出数字的任何建议?还是有更好的解决方案?

稍后编辑:

我无法使用distanceBetweenTappedCellAndTableBottom > keyboardHeight ? do nothing : offsetContentBy keyboardHeight + tappedCellHeight. contentInset tableView,设置sectionHeaders会导致contentInset保持修复状态,而sectionHeaders向上移动。

解决方案基于以下建议:

rows

1 个答案:

答案 0 :(得分:1)

我认为当你将键盘高度添加到edgeInset时键盘也不会移动

  CGSize kbSize = [[[sender userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
NSTimeInterval duration = [[[sender userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];

CGFloat height = UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]) ? kbSize.width : kbSize.height;

[UIView animateWithDuration:duration animations:^{
    UIEdgeInsets edgeInsets = _generalTableView.contentInset;
    edgeInsets.bottom += height;
    _generalTableView.contentInset = edgeInsets;
    edgeInsets = _generalTableView.scrollIndicatorInsets;
    edgeInsets.bottom += height;
    _generalTableView.scrollIndicatorInsets = edgeInsets;
}];