当键盘出现在iOS 7中时,如何调整UITextview的大小

时间:2013-09-25 20:22:19

标签: ios uitextview ios7 keyboard-events

Apple 6已经打破了在iOS 6中执行此操作的旧方法。任何人都可以指导我吗?我查了一下apple的开发人员库,我得到的是“嵌入ScrollView更简单”,我发现这是相当荒谬和不必要的。有人找到了完成这项工作的方法吗?

- (void)keyboardWasShown:(NSNotification *)notification
{
    NSDictionary *info = [notification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, (kbSize.width > kbSize.height ? kbSize.height : kbSize.width), 0);
    self.mainTextView.contentInset = contentInsets;
    self.mainTextView.scrollIndicatorInsets = contentInsets;
}

这对我不起作用。我遇到的问题是textview似乎没有在运行时调整大小,键盘隐藏了屏幕下方的文本。我的代码或这种方法有问题吗?

3 个答案:

答案 0 :(得分:2)

我在迁移代码时遇到了同样的问题。问题是您使用的是UIKeyboardFrameBeginUserInfoKey而不是UIKeyboardFrameEndUserInfoKey

它是动画之前与动画之后的事物。

升级到iOS7.0已使代码现在正如文档所说的那样工作,但这也意味着它们引入了行为中断。

答案 1 :(得分:1)

你记得在viewdidLoad中注册通知吗? (并且不要忘记在dealloc中删除它们)

- (void)viewDidLoad
{
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.

        NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
        [nc addObserver:self selector:@selector(keyboardWillShow:) name:
         UIKeyboardWillShowNotification object:nil];
        [nc addObserver:self selector:@selector(keyboardWillHide:) name:
         UIKeyboardWillHideNotification object:nil];
}

- (void)dealloc {
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];

}

答案 2 :(得分:0)

您可以使用UITextViewTextDidBeginEditingNotification来修改文本视图。