iOS:如何在iOS中调整键盘覆盖区域的高度

时间:2013-07-22 12:24:13

标签: ios keyboard

我很好奇iOS中的一个功能。如果可以,请帮助我。

场景:我正在使用输入名称的文本框。它位于屏幕的下半部分。文本框正下方是一个标签,显示剩余的字符数(例如,在Twitter提要中)。

问题:当我将文本框放在屏幕的上半部分时。文本字段和标签都可见。但当我将它们放在下半部分时,苹果键盘覆盖了标签部分。 有没有办法控制覆盖的区域,使下面的标签也可见? 我希望我已经足够清楚了。 感谢。

4 个答案:

答案 0 :(得分:5)

这里我使用了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可以帮助您

答案 1 :(得分:2)

那么在这种情况下你必须在键盘弹出时移动文本框。你可以注册通知,知道什么时候键盘弹出,滚动视图在屏幕上滚动整个内容可以为你完成工作< / p>

请参阅此question,它解释了如何管理此类内容

答案 2 :(得分:2)

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
    

这里有iOS Human Interface Guide's explanation

答案 3 :(得分:1)

在您的viewDidLoad方法

中添加以下内容
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showKeyboard) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKeyboard) name:UIKeyboardWillHideNotification object:nil];

之后 - 在.m文件中声明以下两种方法

-(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]; }