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

Posted

技术标签:

【中文标题】当键盘出现在 iOS 7 中时如何调整 UITextview 的大小【英文标题】:How do I resize UITextview when the Keyboard shows up in iOS 7 【发布时间】:2013-09-25 20:22:18 【问题描述】:

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 在运行时似乎没有调整大小,并且键盘隐藏了屏幕下部的文本。我的代码或这种方法有问题吗?

【问题讨论】:

您能解释一下“Apple 打破了 iOS 6 中执行此操作的旧方法”吗? 问题已正式编辑:D 你仍然没有解释问题。是不是keyboardWasShown:没有被调用,kbSize(0, 0),那个设置contentInset突然把文本视图的左上角放在导航栏下面?发生了什么事? 再次编辑。谢谢! 您是否使用调试器获取任何其他信息?方法被调用了吗? kbSize 的值是多少? 【参考方案1】:

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

这是动画前与动画后的区别。

升级到 iOS7.0 后,代码现在可以按照文档所述运行,但这也意味着他们引入了行为中断。

【讨论】:

【参考方案2】:

你还记得在 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];

【讨论】:

【参考方案3】:

有一个 UITextViewTextDidBeginEditingNotification 可以用来修改你的文本视图。

【讨论】:

是的,但我指的是键盘通知路由? 您是否验证过旧方法已被弃用? 如果您查看头文件但没有看到它,或者头文件中有说明它已经消失的文档。然后就没了。

以上是关于当键盘出现在 iOS 7 中时如何调整 UITextview 的大小的主要内容,如果未能解决你的问题,请参考以下文章

当键盘出现在 iOS 中时启用滚动内容

当虚拟键盘出现在本机反应中时如何自动向上滚动屏幕(在android上)

键盘出现时如何滚动 UIScrollView?

当软键盘出现在phonegap中时隐藏输入字段

当键盘出现在 Swift 中时 UITextField 向上移动

当键盘出现在swift中时滚动UITextView