【问题标题】:ios5.1 adding a UIView on top of iphone statusbarios5.1在iphone状态栏顶部添加一个UIView
【发布时间】:2012-06-14 10:21:01
【问题描述】:

我正在尝试在状态栏顶部添加一个视图。我一直在关注这个 SO 帖子:Adding view on StatusBar in iPhone

由于某种原因,当我创建窗口并将“隐藏”设置为“否”时,视图似乎不会显示在状态栏的顶部。这个实现在 ios5.1 中还能用吗?

谢谢!

这是我的自定义 UIWindow 类:

@implementation StatusBarOverlay

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    // Place the window on the correct level and position
    self.hidden = NO;
    self.windowLevel = UIWindowLevelStatusBar+1.0f;
    self.frame = [[UIApplication sharedApplication] statusBarFrame];

    // Create an image view with an image to make it look like a status bar.
    UIImageView *backgroundImageView = [[UIImageView alloc] initWithFrame:self.frame];
    backgroundImageView.image = [UIImage imageNamed:@"bar_0.png"];
    backgroundImageView.animationImages = [NSArray arrayWithObjects:[UIImage     imageNamed:@"bar_1.png"],
                                           [UIImage imageNamed:@"bar_2.png"],
                                           [UIImage imageNamed:@"bar_3.png"],
                                           nil];
    backgroundImageView.animationDuration = 0.8;
    [backgroundImageView startAnimating];
    [self addSubview:backgroundImageView];
}
return self;
}

在我的视图控制器中,我创建了新窗口并在 viewDidLoad 中调用它:

StatusBarOverlay *overlayWindow = [[StatusBarOverlay alloc] initWithFrame:CGRectZero];
[overlayWindow makeKeyAndVisible];

但是,视图仍然没有显示。知道为什么吗?

【问题讨论】:

  • 您引用的帖子在顶部说该应用程序被苹果商店拒绝,因为它试图这样做。您是否有理由不能只隐藏状态栏,然后创建一个看起来像状态栏的子视图,可以嵌入到现在具有隐藏状态栏的视图中?
  • 苹果在一千年内不会允许这样做。你的应用被拒绝的速度比 Taco Bell 的炸玉米饼穿过你的肠子还要快。

标签: iphone ios5 uikit


【解决方案1】:

将应用程序的窗口级别设置为 UIWindowLevelStatusBar:

self.window.windowLevel = UIWindowLevelStatusBar;

然后将您自己的视图添加到应用程序窗口的任意位置:

[[[UIApplication sharedApplication]delegate].window addSubview:yourview];

最近遇到这个问题,我就是通过这种方式解决的

【讨论】:

    【解决方案2】:

    您可以创建一个新的UIWindow 并将您的视图添加到其中。将窗口框架设置为[[UIApplication sharedApplication] statusBarFrame] 并调用makeKeyAndVisible 使其可见。

    【讨论】:

    • 我尝试调用 makeKeyAndVisible 但仍然没有运气。我用我的代码示例更新了我的问题。感谢您的尝试!
    【解决方案3】:

    最后,我对 UIWindow 进行了子类化,并将其作为应用程序 AppDelegate 中的主要 UIWindow。我添加了任何自定义视图并将窗口级别设置为 UIWindowLevelStatusBar 以显示在状态栏的顶部。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      相关资源
      最近更新 更多