3

我在 Xcode 4.0 中开发了我的应用程序(仅支持横向)并成功升级到每个新的 IOS,但是对于 ios 7,我们知道状态栏有一个新的变化,即视图顶部的 transulant 栏,如下图所示

在 ios 7 中具有全屏视图和状态栏的图像

但是我通过在 plist 中将 viewcontrollerbasedstatusappearance 参数值更改为 NO 并将窗口原点 x 坐标值更改为 20 像素(为什么 x 坐标意味着,我的应用程序强制以横向启动),它在横向右方向工作。结果如下如下图所示,代码在这里

 -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{

    self.window = [[[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds] autorelease];
    if (DEVICE_IS_IPHONE || DEVICE_IS_IPHONE5)
    {
        [UIApplication sharedApplication].statusBarHidden=YES;
    }
    else if(DEVICE_IS_IPAD)
    {
        [UIApplication sharedApplication].statusBarHidden=NO;
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {

            [application setStatusBarStyle:UIStatusBarStyleLightContent];
            self.window.clipsToBounds=YES;
            self.window.frame=CGRectMake(self.window.frame.origin.x+20, self.window.frame.origin.y, self.window.frame.size.width-20, self.window.frame.size.height);
        }
    }
    mLoginController = [[LoginViewController alloc]init];
    mNavigationController = [[UINavigationController alloc ] initWithRootViewController:mLoginController];
    self.window.rootViewController = mNavigationController;
    [self.window addSubview:[mNavigationController view]];
    [self.window makeKeyAndVisible];
    [mLoginController release];
    return YES;
}

在具有如下所示视图的 loginviewcontroller 中,我使用 loadview 方法来覆盖控制器视图,如下所示,为了您的信息,我将其更改为直接使用 viewdidload,即使发生同样的问题。

-(void)loadView{    
    CGSize theSize = CGSizeMake(1, 1);
    CGRect theFrameRect = [UtilityMethods getAbsoluteFrameForSize:theSize];//i will get the exact    
    screen size based on device
    UIView *theLoginView = [[UIView alloc]initWithFrame:CGRectMake(0, 40, theFrameRect.size.width,   
    theFrameRect.size.height)];
    self.view = theLoginView;
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleTopMargin;
    self.view.backgroundColor = [UIColor blackColor];
}

解析后在 ios 6 中具有正常视图的图像,状态栏框架值如下 {{0-y, 0-x}, {20-h, 1024-w}}

但是,如果我再次向左旋转,状态栏将出现在视图顶部,并且状态栏的框架位于底部,如下图所示。您可以在下图中看到底部的黑色视图,我希望状态栏的窗口框架。

状态栏框架为 {{748-y, 0-x}, {20-h, 1024-w}}

因此,请让我知道任何人如何处理此问题以尽快支持 ios 6 和 7。在此先感谢。

4

1 回答 1

1

UIViewController我会在视图上附加一个观察者bounds

- (void) viewDidLoad
{
    [super viewDidLoad];
    [self.view addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionNew context:NULL];
}

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (object == self.view && [keyPath isEqualToString:@"bounds"]) {
        //redraw your status bar background
    }
}

然后removeObserverdealloc. 这样,您可以始终使状态栏背景与当前外观保持同步。

于 2013-09-18T10:12:06.983 回答