【问题标题】:iOS: How to adjust height of area covered by keyboard in iOSiOS:如何在 iOS 中调整键盘覆盖区域的高度
【发布时间】:2013-07-22 12:24:12
【问题描述】:

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

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

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

【问题讨论】:

标签: ios keyboard


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    那么在这种情况下,您必须在键盘弹出时移动文本框。您可以注册通知以了解键盘何时弹出,并且滚动视图将整个内容向上滚动屏幕可以为您完成这项工作

    看到这个question,它很好地解释了如何管理这样的事情

    【讨论】:

      【解决方案3】:

      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

      【讨论】:

      • 滚动不是解决方案,因为用户在文本框中输入值时应该同时查看显示的标签。
      • 将 textview 和您的 ui 标签放在一个视图中并将其子视图到 scrollView
      • 根据其他答案更改视图元素的位置是一种解决方案,但不建议将框架位置更改为这样的不是最佳的。
      【解决方案4】:

      将以下内容添加到您的 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]; }
      

      【讨论】:

        猜你喜欢
        • 2012-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-05
        • 2015-11-14
        • 1970-01-01
        相关资源
        最近更新 更多