隐藏在键盘下的 SKStoreReviewController 按钮

Posted

技术标签:

【中文标题】隐藏在键盘下的 SKStoreReviewController 按钮【英文标题】:SKStoreReviewController buttons hidden under keyboard 【发布时间】:2018-02-18 07:27:48 【问题描述】:

我的 swift ios 应用程序有一个带有键盘显示的活动文本字段。 每次用户点击键盘上的返回键时,我都会调用

SKStoreReviewController.requestReview()

这听起来可能有些过分,但是一旦用户给出了评论,上述声明将不会做任何事情,所以我认为我的方法是正确的。

问题是在较小的屏幕设备(iPhone 5 等)上,显示的 SKStoreReviewController 的按钮隐藏在键盘下方。

因此用户卡住了,因为他们无法关闭 SKStoreReviewController。 我不想为用户添加键盘隐藏按钮。

我如何知道SKStoreReviewController 何时显示,以便我可以通过编程方式隐藏键盘?

【问题讨论】:

【参考方案1】:

你无法判断它是否正在显示。

您可以阅读SKStoreReviewControllerhere 上的文档,其中仅显示您用来调用它的requestReview() 函数。

但是,如果您想深入了解,我提供了以下屏幕截图,它显示了 Debug View Hierarchy 在显示请求时的样子。

这告诉您,您无法通过诸如presentedViewController 之类的属性来尝试挖掘任何内容,以尝试预测屏幕是否正在呈现。

通常,如果您要呈现UIAlertController 或任何与此相关的 UI 元素,您会看到构成它的 UI 部分堆叠在一起,这表明您可以访问相关属性以找出所呈现的内容。在这个类中,这些都没有提供,因此您的应用程序对正在发生的事情一无所知。

以下屏幕截图说明了当屏幕上有多个元素时视图层次结构的样子:

正如 Apple 在课程文档中提到的那样,您需要开发自己的逻辑,以便在它不会呈现您当前遇到的问题时呈现它。

【讨论】:

感谢您的详细解答【参考方案2】:

我刚刚在这里回答了这个问题:

Mechanism to detect display of iOS 10.3 app rating dialog?

您可以将文本字段设置为在显示评分视图时关闭键盘,并在关闭评分视图时再次启用键盘:

- (void)windowDidBecomeVisibleNotification:(NSNotification *)notification

    if([notification.object class] == [MonitorObject class])
    
        NSLog(@"Review Window shown");
        [self.enterCodeView resignFirstResponder];
    


- (void)windowDidBecomeHiddenNotification:(NSNotification *)notification

    if([notification.object class] == [MonitorObject class])
    
        NSLog(@"Review Window hidden!");
        [self.enterCodeView becomeFirstResponder];
    
 

【讨论】:

以上是关于隐藏在键盘下的 SKStoreReviewController 按钮的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:故意隐藏键盘下的Stack项目

使用 Appium 时,Android 物理设备中的键盘并不总是隐藏

appium 隐藏键盘后怎样显示键盘

虚拟键盘隐藏字段/文本区域/内容可编辑(隐藏在键盘下方)

“隐藏键盘”按钮不会将键盘隐藏在iPad模拟器上

如何在输入键上隐藏键盘