iOS,键盘预测栏可见性

5
我有一些UITextView实例,当键盘出现时,我希望这个textView占据所有空白的垂直空间。问题是,我不知道键盘会占用多高的空间,因为它在iOS 8中有预测栏,而且当键盘已经显示时,用户可以更改其实际高度。我不想改变textView的自动更正类型,我对那个条很满意,只想以正确的方式处理它。
所以问题是:是否有可能知道此栏是否可见?是否有任何方法触发用户滑动来显示/隐藏此栏?
提前致谢。

更新我的回答?告诉我你的想法吧? - Omarj
4个回答

4

您可以将UITextView的autocorrectionType设置为UITextAutocorrectionTypeNo(或在IB中更改为NO),这将禁用iOS 8中的自动纠正和预测文本栏。然而,似乎没有办法仅禁用预测栏。

yourTextView.autocorrectionType = UITextAutocorrectionTypeNo;

输入图像描述

编辑:

查看此链接,我认为会很有帮助。


OP已经提到了:“我不想改变textView的自动更正类型。我对那个栏很满意,只是想以正确的方式处理它。”那么这怎么成为解决方案了呢? - Vizllx
禁用自动更正将隐藏此栏。我想以适当的方式处理这个栏,但似乎苹果没有提供这种方式。 - B.S.
@B.S. 你所说的“以适当的方式处理它”是什么意思?你想要做什么? - Omarj
@B.S. 苹果并没有把所有东西都文档化,我们应该从他们在开发者网站提供的示例项目中学习。我们都可以从中学到很多东西。无论如何,我的答案已经有了如何处理这个栏的解决方案。 - Vizllx

3

当用户滑动UIKeyboard时,您可以处理显示/隐藏栏(预测栏),

第一步

viewdidLoad()中声明键盘通知,并声明全局变量kbSize

float kbSize;

 - (void)viewDidLoad
{
     kbSize=0.0;
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShowNotification:) name:UIKeyboardWillShowNotification object:nil];

--- rest of your code here---
}

第二步

现在在keyboardWillShowNotification()方法中执行以下操作

#pragma mark - Notifications
- (void)keyboardWillShowNotification:(NSNotification *)aNotification{

       NSDictionary *infos  = aNotification.userInfo;
       NSValue      *value = infos[UIKeyboardFrameEndUserInfoKey];

       CGRect rawFrame      = [value CGRectValue];
       CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];


     if(kbSize==0.0)
    {

       kbSize=keyboardFrame.size.height;
       NSLog(@"prediction bar is visible");


     }

     else if(keyboardFrame.size.height<kbSize)
      { 

          NSLog(@"prediction bar is not visible");
          --- rest of your code here, how you want to change your view when bar is not visible ---

      }

     else
      {

          NSLog(@"prediction bar is visible");
           --- rest of your code here, how you want to change your view when bar is  visible ---

      }

}

结论: 无论用户何时编辑您的文本字段或者何时滑动以隐藏或显示预测栏,keyboardWillShowNotification都会触发。

因此,我们只需在keyboardWillShowNotification触发时检查键盘的高度,如果用户滑动栏以隐藏,则键盘高度将自动减小,而我们已经将键盘高度存储在变量kbSize中,我们只需检查当前键盘高度是否小于存储的kbSize。通过这种方式,我们可以在运行时检查栏是否可见或用户是否滑动以隐藏栏。


1

您可以通过添加观察者来获取键盘高度:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillChange:", name: UIKeyboardDidChangeFrameNotification, object: nil)
//Method
func keyboardWillChange(notification: NSNotification){
        println(notification.userInfo?.description)

 }

0
在我的情况下,问题是我没有考虑到底部安全边距,当键盘出现时,我必须减去底部安全边距才能正确设置内容大小。这可能会帮助一些人在没有预测的情况下计算键盘高度。
let window = UIApplication.shared.keyWindow
bottomInsets = window?.safeAreaInsets.bottom ?? 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接