【发布时间】:2013-07-22 12:24:12
【问题描述】:
我对 iOS 中的一个功能很好奇。如果可以的话,请在这里帮助我。
场景:我正在使用输入名称的文本框。它在屏幕的下半部分。文本框正下方是一个标签,显示剩余字符数(例如,在 twitter 提要中)。
问题:当我将文本框放在屏幕的上半部分时。文本字段和标签都是可见的。但是当我把它们放在下半部分时,苹果键盘覆盖了标签部分。 有没有办法控制覆盖的区域,使下面的标签也可见? 我希望我已经把自己说得够清楚了。 谢谢。
【问题讨论】:
我对 iOS 中的一个功能很好奇。如果可以的话,请在这里帮助我。
场景:我正在使用输入名称的文本框。它在屏幕的下半部分。文本框正下方是一个标签,显示剩余字符数(例如,在 twitter 提要中)。
问题:当我将文本框放在屏幕的上半部分时。文本字段和标签都是可见的。但是当我把它们放在下半部分时,苹果键盘覆盖了标签部分。 有没有办法控制覆盖的区域,使下面的标签也可见? 我希望我已经把自己说得够清楚了。 谢谢。
【问题讨论】:
这里我对UITextView 使用了委托方法,与UITextField 使用的方法相同
-在此代码中,当用户开始在 textview 中输入值时,它会使您的视图的高度低于原来的动画效果
-当用户结束输入值时,它将使您的视图大小为原始大小。
-(void)textViewDidBeginEditing:(UITextView *)textView
{
CGRect frame = self.view.frame;
frame.origin.y = -100;
[self.view setFrame:frame];
[UIView commitAnimations];
}
-(void)textViewDidEndEditing:(UITextView *)textView
{
CGRect frame = self.view.frame;
frame.origin.y = 0;
[self.view setFrame:frame];
[UIView commitAnimations];
}
如果您想了解委托,link 可以帮助您
【讨论】:
那么在这种情况下,您必须在键盘弹出时移动文本框。您可以注册通知以了解键盘何时弹出,并且滚动视图将整个内容向上滚动屏幕可以为您完成这项工作
看到这个question,它很好地解释了如何管理这样的事情
【讨论】:
AFAIK 你无法控制 iOS 原生键盘的大小,你可以而且应该做的就是让它们成为滚动视图的子视图并向上滚动。
所以通常的做法是这样的。
UIKeyboardWillShowNotification
在 Notification 监听器将调用的方法中,相应地设置 scrollView 的内容大小并设置内容偏移量。
self.scrollView.contentSize = CGSizeMake(320, 267);
self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, localKeyboardFrame.size.height, 0);
[self.scrollView scrollRectToVisible:<rect of view you want to scroll to> animated:YES];
在键盘隐藏时撤消更改,在适当通知的帮助下。UIKeyboardWillHideNotification
self.scrollView.contentInset = UIEdgeInsetsZero
【讨论】:
将以下内容添加到您的 viewDidLoad 方法中
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showKeyboard) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKeyboard) name:UIKeyboardWillHideNotification object:nil];
然后——在你的 .m 文件中声明以下 2 个方法
-(void)showKeyboard {
[UIView beginAnimations:@"slide" context:nil];
[UIView setAnimationDuration:0.3];
self.view.transform = CGAffineTransformMakeTranslation(0, -100);
[UIView commitAnimations]; }
-(void)hideKeyboard {
[UIView beginAnimations:@"slide" context:nil];
[UIView setAnimationDuration:0.1];
self.view.transform = CGAffineTransformMakeTranslation(0, 0);
[UIView commitAnimations]; }
【讨论】: