【问题标题】:Keyboard view in iOS 8 is acting strangeiOS 8 中的键盘视图表现得很奇怪
【发布时间】:2023-12-30 20:15:01
【问题描述】:

我目前在键盘处于活动状态时更改滚动视图大小。我还使用箭头让用户快速移动到下一个文本字段。我的 scrollRectToVisible 在垂直方向上无法正常工作。它适当地水平移动。我的小数点有问题

2014-09-12 10:29:24.039 TS[1895:455658] Can't find keyplane that supports type 8 for keyboard iPhone-Portrait-DecimalPad; using 1425143906_Portrait_iPhone-Simple-Pad_Default

我还单步执行了以下代码。

- (void)keyboardDidShow:(NSNotification *)n {
// Find top of keyboard input view
CGRect keyboardRect = [[[n userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
keyboardRect = [self.view convertRect:keyboardRect fromView:nil];
CGFloat keyboardTop = keyboardRect.origin.y;

// Resize scroll view
CGRect newScrollViewFrame = CGRectMake(0, 0, self.view.bounds.size.width, keyboardTop);
newScrollViewFrame.size.height = keyboardTop - self.view.bounds.origin.y;
[self.scrollView setFrame:newScrollViewFrame];
}

我注意到我的小数点键盘的keyboardRect 是244,我的默认键盘是207。我不知道如何解决这个问题。这个问题也只出现在 iOS 8 中。我的应用在 iOS 7 中没有任何问题。感谢您的帮助。

更新: 我发现当最初选择一个文本字段时,滚动视图会适当地移动。然后,当您在键盘启动时选择另一个文本字段时,就会出现问题。滚动视图似乎将其大小重置为原始尺寸。为什么会发生这种情况?有没有办法阻止这种情况发生?

【问题讨论】:

  • 在 ios 8.4 和 Xcode 6.4 中使用 scorllview 和自动调整大小时,我遇到了同样的奇怪行为。对此的快速解决方法是在 textField 委托方法中调整 ScrollView 的框架 -(void)textFieldDidEndEditing:(UITextField *)textField.

标签: uiscrollview ios8 uikeyboard


【解决方案1】:

1) 问题

看到这个帖子:Xcode iOS 8 Keyboard types not supported

2) 问题:

不确定你的意思。可能与 iOS 8 键盘类型更改有关。请记住,rect 包含您添加的任何附件视图。

3) 更新部分的附加问题:

我遇到了同样的问题,并想出一些线索。

我在 viewcontroller.view 中放置了一个滚动视图,并在该滚动视图中放置了一堆文本字段。我在 UIKeyboardDidShowNotification 和 UIKeyboardWillHideNotification 上调整了滚动视图框架的大小。它在 iOS7 上运行良好,但在 iOS8 上,当您关注另一个文本字段(成为第一响应者)时,滚动视图会静默调整回正常大小。

我进一步研究了它。我有另一个页面,它是在 iOS8 升级之前创建的,使用相同的逻辑仍然可以正常工作。但一个不同之处在于,在该页面中,滚动视图是通过编程方式添加的,而这个故障页面是自动布局(对于 viewcontroller.view,scrollview 具有所有边距为零的约束)。

所以我做了一个测试,在keyboardshow/hide上调整viewcontroller.view的框架和边界,问题就消失了。所以我猜测 iOS8 在视图第一响应者更改时添加了整个页面重新布局(重新计算约束)。

不确定什么是最佳解决方案。当我找到处理此问题的更好方法时,将更新此答案。

【讨论】:

  • 我绝对可以看到与自动布局有关的问题。我最近没有太多时间来测试这个。但我会尝试改变自动布局,看看会发生什么。谢谢
最近更新 更多