我有一些UITextView实例,当键盘出现时,我希望这个textView占据所有空白的垂直空间。问题是,我不知道键盘会占用多高的空间,因为它在iOS 8中有预测栏,而且当键盘已经显示时,用户可以更改其实际高度。我不想改变textView的自动更正类型,我对那个条很满意,只想以正确的方式处理它。
所以问题是:是否有可能知道此栏是否可见?是否有任何方法触发用户滑动来显示/隐藏此栏?
提前致谢。
所以问题是:是否有可能知道此栏是否可见?是否有任何方法触发用户滑动来显示/隐藏此栏?
提前致谢。
您可以将UITextView的autocorrectionType设置为UITextAutocorrectionTypeNo(或在IB中更改为NO),这将禁用iOS 8中的自动纠正和预测文本栏。然而,似乎没有办法仅禁用预测栏。
yourTextView.autocorrectionType = UITextAutocorrectionTypeNo;
编辑:
当用户滑动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
。通过这种方式,我们可以在运行时检查栏是否可见或用户是否滑动以隐藏栏。
您可以通过添加观察者来获取键盘高度:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillChange:", name: UIKeyboardDidChangeFrameNotification, object: nil)
//Method
func keyboardWillChange(notification: NSNotification){
println(notification.userInfo?.description)
}
let window = UIApplication.shared.keyWindow
bottomInsets = window?.safeAreaInsets.bottom ?? 0