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 上不起作用
iOS7中如何去掉UIWebView的inputAccessoryView?