[ios]当键盘出现时调整大小 UITextView

发布时间: 2015/7/9 0:22:49
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想要调整大小的文本视图时出现虚拟键盘。下面是我拥有的代码。我有自动布局上,因此使用约束的 textView-> 从上海华盈底部空间和引用它通过 IBOutlet distanceFromBottom。

- (void)keyboardWillShow:(NSNotification *)notification
{
  [UIView animateWithDuration:0.3 animations:^{
    NSDictionary* d = [notification userInfo];
    CGRect r = [d[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    r = [textView convertRect:r fromView:Nil];
    if(IS_IPHONE_6||IS_IPHONE_6P)
      distanceFromBottom.constant = r.origin.y+78;
    else if(IS_IPHONE_5)
      distanceFromBottom.constant = r.origin.y+183;
  }];
}

上面的代码完美的作品。不明白的是为什么我需要添加 +78 为 iPhone6 或为 iPhone5 183。这两个值我来的试验和错误。如果我不将这些添加,textView 扩展键盘下面。请帮我解开这个谜。

解决方法 1:

在 viewWillAppear 方法中,添加以下内容:

- (void) viewWillAppear:(BOOL)paramAnimated{
    [super viewWillAppear:paramAnimated];


    [[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(handleKeyboardDidShow:) 
    name:UIKeyboardDidShowNotification object:nil];


    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(handleKeyboardWillHide:)     
     name:UIKeyboardWillHideNotification object:nil];    
}

然后执行通知中心,像这样的两种方法:

- (void) handleKeyboardDidShow:(NSNotification *)paramNotification{

    NSValue *keyboardRectAsObject =
    [[paramNotification userInfo]
   objectForKey:UIKeyboardFrameEndUserInfoKey];


    CGRect keyboardRect = CGRectZero;
    [keyboardRectAsObject getValue:&keyboardRect];


    yourTextView.contentInset =
    UIEdgeInsetsMake(0.0f,
                     0.0f,
                     keyboardRect.size.height,
                     0.0f);
}

和另一个像:

- (void) handleKeyboardWillHide:(NSNotification *)paramNotification{

 yourTextView.contentInset = UIEdgeInsetsZero;

}

它将为所有的设备工作;)

希望它能帮助

官方微信
官方QQ群
31647020