隐藏在键盘下的 SKStoreReviewController 按钮
Posted
技术标签:
【中文标题】隐藏在键盘下的 SKStoreReviewController 按钮【英文标题】:SKStoreReviewController buttons hidden under keyboard 【发布时间】:2018-02-18 07:27:48 【问题描述】:我的 swift ios 应用程序有一个带有键盘显示的活动文本字段。 每次用户点击键盘上的返回键时,我都会调用
SKStoreReviewController.requestReview()
这听起来可能有些过分,但是一旦用户给出了评论,上述声明将不会做任何事情,所以我认为我的方法是正确的。
问题是在较小的屏幕设备(iPhone 5 等)上,显示的 SKStoreReviewController 的按钮隐藏在键盘下方。
因此用户卡住了,因为他们无法关闭 SKStoreReviewController。 我不想为用户添加键盘隐藏按钮。
我如何知道SKStoreReviewController
何时显示,以便我可以通过编程方式隐藏键盘?
【问题讨论】:
【参考方案1】:你无法判断它是否正在显示。
您可以阅读SKStoreReviewController
here 上的文档,其中仅显示您用来调用它的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 按钮的主要内容,如果未能解决你的问题,请参考以下文章