我有一个在界面构建器中创建的视图窗口。我创建了一个UIScrollView,它填充整个窗口并将其他一些项目拖入其中,包括UITextView。我遇到的问题是,当我单击写入TextView时,键盘会阻止TextView的视图,因此使用ScrollView。
现在我已经搜索了很多,并认为我知道我需要做什么,但如果我做得对,那是另一回事。
我得到反弹,也就是说我可以拖动ScrollView中的所有东西,它会反弹回来。当我按下在TextView中写入键盘弹出时,这会将ScrollView缩小为“屏幕大小” - “键盘大小”(我知道这是因为我没有实现“执行此操作一旦我隐藏键盘”功能但是,当我隐藏键盘时,ScrollView现在会在键盘启动的地方结束。但即使视图大小现在小于内容大小,它也不会滚动,只是继续反弹。
下面你可以看到我正在使用的代码。我在viewDidLoad中调用了registerForKeyboardNotifications。
// Call this method somewhere in your view controller setup code.
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
}
// Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification *)n
{
NSLog(@"WoopWoopWoop");
NSDictionary* userInfo = [n userInfo];
// get the size of the keyboard
CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
// resize the noteView
CGRect viewFrame = self.mainScrollView.frame;
viewFrame.size.height -= (keyboardSize.height);
mainScrollView.bounces = YES;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.4];
[self.mainScrollView setFrame:viewFrame];
[UIView commitAnimations];
}
我尝试将内容视图设置为任意大小,例如
[mainScrollView setContentSize:CGSizeMake(3200.0,2300.0)];
但这没有效果......
有什么想法吗?
答案 0 :(得分:1)
嗨,您不需要使用通知。只需使用UITextFieldDelegate
协议方法即可。您可以在这些方法中为scrollView设置内容偏移量。
例如:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
//Check the necessary textfield and then change yValue accordingly
[scrollView setContentOffset:CGPointMake(0,yValue) animated:YES];
return YES;
}
答案 1 :(得分:1)
当我单击写入TextView时,键盘会阻止TextView的视图,因此使用ScrollView。
首先,我建议不要使用UIScrollViews(如果只显示UITextView。另外,请记住UITextView是UIScrollView的子类)。
您可以通过将UITextView配置为UIView的子视图来实现UITextView的重新定位和调整大小。在UIView上启用autoresizesSubviews
并配置两个视图的弹簧和支柱via the IB Inspector。 UIView容器应占用所有可用空间。
使用与问题中描述的方法相同的方法,当调整UIView的大小时,它也应该自动调整UITextView的框架。
现在,即使你确实需要在顶部有一个UIScrollView的视图层次结构,我仍然建议将它包装到一个普通的UIView容器中,并配置如上所述的自动调整大小。
希望有所帮助!