我想在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
答案 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;
}];