【发布时间】:2011-03-05 03:06:02
【问题描述】:
我想制作一个部分透明的叠加层,并覆盖整个屏幕,包括状态栏。我已经看到 Tapbots 的人就是这样做的。所以它必须以某种方式成为可能。状态栏应该仍然可见!
【问题讨论】:
-
考虑重新考虑您的设计。为什么需要隐藏状态栏?即使其他一些应用程序正在这样做,由于审查过程不一致,您仍然可能会因为 UI 违规而被 Apple 拒绝。
标签: iphone
我想制作一个部分透明的叠加层,并覆盖整个屏幕,包括状态栏。我已经看到 Tapbots 的人就是这样做的。所以它必须以某种方式成为可能。状态栏应该仍然可见!
【问题讨论】:
标签: iphone
在 iPhoneOS 3.2 之前:
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
iPhoneOS 3.2 之后:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation: UIStatusBarAnimationNone];
有关这些的更多信息,请参阅UIApplication 的文档。
【讨论】:
隐藏状态栏有两种方式:
在运行时以编程方式使用UIApplication sharedApplication:
- (void)setStatusBarHidden:(BOOL)hiddenwithAnimation:(UIStatusBarAnimation_)animation
或者在设计时使用 Info.plist 属性UIStatusBarHiddenyes/no 值。
【讨论】:
您可以尝试创建一个全尺寸视图并将其添加为主窗口的子视图。比如:
CGRect mainWindowSize = [UIScreen mainScreen].bounds;
UIView* overlay = [[UIView alloc] initWithFrame:mainWindowSize];
// Use colorWithRed:green:blue:alpha: or a solid color then manually tweak alpha
overlay.backgroundColor = [UIColor redColor];
overlay.alpha = 0.2; // transparency level
overlay.userInteractionEnabled = YES;
// Add it on top of the main window
UIWindow* mainWindow = (((MyAppDelegate*)
[UIApplication sharedApplication].delegate).window);
[mainWindow addSubview:overlay];
警告:您可能必须手动隐藏状态栏。此外,此覆盖视图及其子视图将获取所有用户点击事件。可能想确保这是您想要的。
【讨论】:
将视图控制器作为 modalViewController....
如果您的视图控制器是 AVC 并假设您使用导航控制器:
[self presentModalViewController:AVC animated:YES];
从您所在的当前视图控制器。
【讨论】: