Search code examples
iphoneuikituiapplication

Adding view on StatusBar in iPhone


Is it possible to add a UIView on the staus bar of size (320 x 20)? I don't want to hide the status bar, I only want to add it on top of the status bar.


Solution

  • You can easily accomplish this by creating your own window above the existing status bar.

    Just create a simple subclass of UIWindow with the following override of initWithFrame:

    @interface ACStatusBarOverlayWindow : UIWindow {
    }
    @end
    
    @implementation ACStatusBarOverlayWindow
    - (id)initWithFrame:(CGRect)frame {
        if ((self = [super initWithFrame:frame])) {
            // Place the window on the correct level and position
            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:@"statusBarBackground.png"];
            [self addSubview:backgroundImageView];
            [backgroundImageView release];
    
            // TODO: Insert subviews (labels, imageViews, etc...)
        }
        return self;
    }
    @end
    

    You can now, for example in a view controller in your application, create an instance of your new class and make it visible.

    overlayWindow = [[ACStatusBarOverlayWindow alloc] initWithFrame:CGRectZero];
    overlayWindow.hidden = NO;
    

    Be aware of messing with the window key status by using - (void)makeKeyAndVisible or similar. If you make your main window (the UIWindow in your Application Delegate) loose key status, you will encounter problems with scrolling scrollviews to top when tapping the status bar etc.