我正在开展一个项目,我的UIView
包含多个UI元素,包括UITextField
。 UITextField
变为有效状态(即becomesFirstResponder
)后,弹出的键盘会覆盖UITextField
。包含所有UI元素的UIView
位于UIScrollView
。
现在,除了将contentView向上移动到UIScrollView
的可见区域之外,我需要做的另一件事是确保用户无法在键盘下方(和后面)滚动contentView,也不能滚动上面的contentView(以及导航栏后面)。
我到目前为止的相关代码是:
-(void)keyboardDidShow:(NSNotification *)notification {
CGFloat height = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
self.scrollViewBottomContstraint.constant = height;
[self.view layoutIfNeeded];
}
有人能告诉我如何确保我的contentView只能在导航栏和键盘之间的可见区域内进行最低限度的滚动吗?
答案 0 :(得分:1)
这可能对您有所帮助。
//KEYBOARD SHOWN
- (void)keyboardShown:(NSNotification*)notification
{
NSDictionary* dic = [notification userInfo];
CGSize keyboardSize = [[dic objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
CGPoint scrollPoint = CGPointMake(0.0, textField.frame.origin.y-keyboardSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
//when keyboard hides
- (void)keyboardHidden:(NSNotification*)notification
{
// Set the Scroll view content inset to UIEdgeInsetsZero
}
答案 1 :(得分:1)
当出现键盘通知时,我会:
CMakeLists.txt
上的约束常量,使其大小仅为屏幕的可见部分。您已经使用底部约束的高度设置开始了这条路径。UIScrollView
上的contentSize
属性以匹配。这样,用户执行的任何滚动都仅限于他们可以访问的内容。当键盘消失时,您可以在进行这些调整之前恢复以前的设置。
请注意,在某些情况下,使用带有静态表格单元格和其中的静态内容的UITableView可以更容易。 iOS运行时似乎将一些滚动处理为可见的东西。