InputAccessoryView 在 iOS 8 模拟器上不显示

Posted

技术标签:

【中文标题】InputAccessoryView 在 iOS 8 模拟器上不显示【英文标题】:InputAccessoryView does not show on iOS 8 simulator 【发布时间】:2014-09-14 15:25:06 【问题描述】:

我从 ios 5 开始就有 iOS 应用程序,它包括一个自定义 UITextView,它使用自己的 inputView 和 inputAccessoryView。它适用于iOS 7模拟器,当它成为FirstResponse时,inputView和inputAccessoryView都显示,但在iOS 8模拟器中,只有关联的inputView显示,inputAccessoryView不显示。

我正在使用 Xcode 6 GM 种子

HeInput_TextView.m

- (void)awakeFromNib


   self.text = @"";

   heKeyboard4x5 = [[HeKeyboard_ViewController alloc] init]; 
   inputAccessoryVC = [[InputAccessory_ViewController alloc] init]; 

   self.inputView = heKeyboard4x5.view;
   self.inputAccessoryView = inputAccessoryVC.view;

这是 iOS 8 模拟器中的错误还是 iOS 8 的更改?

编辑:

我找到了有关此问题的更多信息。

这个问题发生在Page-Based应用程序中,如果UIPageViewController的一个页面中有一个UITextView,那么UITextView.inputAccessoryView在iOS 8模拟器中不显示,但在iOS 7.1模拟器中显示。

我创建了两个项目:“基于单视图的应用程序”和“基于页面的应用程序”,并确认问题如上所述发生。

【问题讨论】:

【参考方案1】:

这是 xcode 6 中模拟器的新行为。查看自定义附件视图甚至默认尝试取消选中硬件 -> 模拟器 -> 连接硬件键盘。

【讨论】:

我未勾选硬件 -> 键盘 -> 连接硬件键盘,inputAccessoryView 在 iPhone5(8.0) 上仍然不显示,但在 iPhone5(7.1) 上显示。 @heMac 我在我的项目中使用github.com/simonbs/BSKeyboardControls。它有自定义 inputAccesoryView。运行良好的是模拟器 6 ios 8。您可以签出项目测试,并可能从工作代码中观察到一些想法。 @nyekimon 谢谢,这个示例说服了 iOS 8 模拟器上的 InputAccessoryView 显示,所以该程序在我的项目中。【参考方案2】:

这是一个 iOS8 错误。

您可以在 Apple 的通讯录 App 中的模拟器上重现它。

添加新联系人并向下滚动到“添加日期”。

同样的问题。一位同事提出了一个苹果 rdar。

【讨论】:

感谢投反对票!这是一个错误,在联系人应用程序中,无法输入连接硬件键盘的日期。这种预期的行为如何?【参考方案3】:

我发现 iOS8 中的视图附件不使用视图的框架来偏移它们在 InputView(甚至默认软件键盘)上方的高度。

您可能需要确保您的 inputAccessoryView 实现了

-(CGSize)intrinsicContentSize

例如:

@implementation InputAccessory_View
// .. your code ...
-(CGSize)intrinsicContentSize
    return self.frame.size;

@end

【讨论】:

视图控制器没有frame【参考方案4】:

抱歉,我误读了该项目。我被 iOS8 的键盘问题吓坏了。

【讨论】:

在iOS8.1中修复,这是一个bug。 详细说明您的 inputAccessoryView 解决方法 - 您如何建议干净地检测 inputView 是否已/尚未被物理键盘隐藏,并且应将其内容推入 inputAccessoryView?否则,非物理键盘用户将在屏幕上拥有相当于两个 inputView。 (键盘 + inputAccessoryView)

以上是关于InputAccessoryView 在 iOS 8 模拟器上不显示的主要内容,如果未能解决你的问题,请参考以下文章

反应本机 InputAccessoryView 在 iOS 11 上不起作用

iOS 11 inputAccessoryView 坏了

iOS7中如何去掉UIWebView的inputAccessoryView?

InputAccessoryView之后的iOS程序流程

InputAccessoryView 的 viewWillDisappear:iOS 9 早期调用的方法

ObjC iOS11:在 inputAccessoryView 中成为第一响应者时,TextField 不显示