2

在 iOS 中,如果您从屏幕上垂直滑动到屏幕上,您将获得下拉通知屏幕。

如果您将状态栏设置为隐藏(全屏应用程序)然后向下滑动您会得到一个提示下拉“选项卡”,这太棒了!(见下面的截图)

无论如何显示状态栏,以便用户可以看到时间和他们的服务和电池百分比以及所有内容,然后我们还有提示下拉“选项卡”显示而不是它只是自动滑下整个通知中心?

在此处输入图像描述

4

2 回答 2

1

我相信没有直接的机制,但可以应用一个技巧来实现这一点。但这同样不会给出您在这里所期望的确切解决方案。但是让我分享一下我的想法。

在 UIViewController 子类中实现 touchBegan 方法并捕获触摸事件的起点。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

UITouch *touch = [触摸任何对象];

CGPoint startPoint = [触摸 locationInView:self.view];

然后您可以将y坐标值与 30/40 像素进行比较(这是应用屏幕检测到通知拉动事件的大约像素高度)

如果(startPoint.y <= 40){

现在您可以将statusBarHidden属性设置为NO

@注意事项:-

  • 您需要在触摸事件后稍微延迟设置属性,否则它会立即拉下通知视图。
  • 一旦 statusBar 可见,您的下拉菜单就消失了。
  • 此外,您需要在一定时间间隔后再次隐藏状态栏。
  • 由于此功能应在应用程序的任何屏幕(视图)上工作,您可能希望在UIViewController上创建一个类别以避免在每个类中处理此问题。
  • 您应该小心手势处理,因为您覆盖了 touchesBegan(请参阅开发中心的责任链机制)
于 2014-08-22T12:42:05.107 回答
0

在 appDelegate 中,您需要添加第二个 UIWindow(属性 STRONG 保留),它是您的应用程序的完整大小,具有清晰的背景。

将 UIWINDOWS 级别设置为:setWindowLevel:UIWindowLevelStatusBar+1.0f

然后您需要添加第二个 VC 并将其设置为第二个 UIWindow 的子视图。

在那个 VC.m 你做 touchesBegan 并且如果 location.y 在状态栏的高度乘以 2 的区域(高度 * 2,因为你可以将通知从比状态栏低一点的地方拉下来)然后你设置状态栏隐藏并调用prefersStatusBarHiddenYES 和setNeedsStatusBarAppearanceUpdate

*(请注意,您必须创建新的 UIWindow 和 VC,否则您将无法在状态栏位置检测到 touchesBegan)。

然后一旦 touchesEnded 或 touchesMoved 在该区域下方,您可以使状态栏再次可见。

这会使状态栏闪烁片刻,并导致出现三角形。

现在将您的整个应用程序功能移动到第二个 VC




证据在布丁中:在此处输入图像描述

于 2014-11-06T04:18:31.143 回答