在iPhone中的StatusBar上添加视图

Bir*_*chi 62 iphone uikit uiapplication

是否可以在尺寸为(320 x 20)的staus条上添加UIView?我不想隐藏状态栏,我只想将其添加到状态栏的顶部.

all*_*eus 87

您可以通过在现有状态栏上方创建自己的窗口来轻松完成此操作.

只需UIWindow使用以下覆盖创建一个简单的子类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
Run Code Online (Sandbox Code Playgroud)

现在,您可以在应用程序的视图控制器中创建新类的实例并使其可见.

overlayWindow = [[ACStatusBarOverlayWindow alloc] initWithFrame:CGRectZero];
overlayWindow.hidden = NO;
Run Code Online (Sandbox Code Playgroud)

请注意使用- (void)makeKeyAndVisible或类似的方法弄乱窗口键状态.如果使主窗口(UIWindow应用程序代理中)松开键状态,则在点击状态栏等时将滚动浏览器滚动到顶部会遇到问题.

  • 对于它的价值,我很难让窗口显示,原因是我没有保留实例.似乎应用程序非常渴望在ARC环境下发布这些应用程序,因此如果您没有明确地将其保留为实例变量/属性,它将在它显示之前被释放. (4认同)

mye*_*l0w 58

我写了一个模拟Reeders状态栏覆盖的静态库,你可以在这里找到它:https://github.com/myell0w/MTStatusBarOverlay

MTStatusBarOverlay MTStatusBarOverlay

它目前支持iPhone和iPad,默认和不透明的黑色状态栏样式,旋转,3种不同的任何模式,历史跟踪和更多的好东西!

随意使用它或发送一个Pull请求来增强它!

  • 坏消息的人,Apple开始拒绝使用MTStatusBarOverlay的应用程序或"在本机状态栏上显示自定义状态栏覆盖"的类似解决方案.显然它违反了HIG :( (5认同)