self.window无法在视图控制器内部工作

时间:2013-10-22 11:56:29

标签: ios objective-c ios7 uistatusbar

对于iOS 7,我有状态栏问题。为此我通过使用Appdelegate中的以下代码

来解决它
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleLightContent];
    self.window.clipsToBounds =YES;
    self.window.frame =  CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
    self.window.bounds = CGRectMake(0,0, self.window.frame.size.width, self.window.frame.size.height);
}

一切都很完美。

拍摄照片时只会出现问题。

当我打开相机或照片库时,我仍然会看到状态栏,因此我看到了一半导航标题,如下所示。

enter image description here

我知道如何克服这个错误?

问题是:

  1. 照片库/相机如上图所示

  2. 如果我点击取消,我的视图会自动向上移动20px。

3 个答案:

答案 0 :(得分:5)

而不是:

self.window 

使用此:

[[self view] window]

尝试这样:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleLightContent];
    self.view.window.clipsToBounds =YES;
    self.view.window.frame =  CGRectMake(0,20,self.view.window.frame.size.width,self.view.window.frame.size.height-20);
    self.view.window.bounds = CGRectMake(0,0, self.view.window.frame.size.width, self.view.window.frame.size.height);
}

答案 1 :(得分:1)

我猜你正在使用UINavigationController。如果您正在使用UINavigationController,则与框架无关,也无法对状态栏执行任何操作。请更喜欢以下代码来设置UINavigationController以及状态栏设置。否则,您可以显示代码,将帮助您解决此问题。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[ExViewController alloc] initWithNibName:@"ExViewController" bundle:nil];
    self.window.rootViewController = self.viewController;

    self.mainViewNavigation = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window.rootViewController = mainViewNavigation;


    [self.window addSubview:self.mainViewNavigation.view];
    [self.window makeKeyAndVisible];
    return YES;
}

答案 2 :(得分:0)

我和我的一个项目面对这个问题。我们甚至没有许多类的xib。所以我所能做的就是在委托函数中再次重置帧。

   [self.navigationController dismissViewControllerAnimated:YES
                                              completion:^{
                                                  [self.navigationController.view setFrame:CGRectMake(self.navigationController.view.frame.origin.x, [UIApplication sharedApplication].statusBarFrame.size.height, self.navigationController.view.frame.size.width, [[UIScreen mainScreen] bounds].size.height-[UIApplication sharedApplication].statusBarFrame.size.height)];
                                              }];

我把它放在照片/相机纠察队,邮件选择器的完成/取消委托方法中。