根据方向处理状态栏高度

时间:2016-03-04 01:26:45

标签: ios objective-c layout

我发现在iPhone状态栏上的专辑方向消失了。我的观点使用.frame属性在状态栏下调整。现在,当状态栏消失时,我想将它们移动得更高。这样做的正确方法是什么?同样在iPad上状态栏不会消失,所以我想要一些通用的方法来处理它。

目前我可以在控制器中重载viewWillTransitionToSize:withTransitionCoordinator:并在那里调整设置。但我无法确定状态栏是否会在转换后隐藏。

如果重要的话,我会使用.xib个文件,而不是故事板。

1 个答案:

答案 0 :(得分:1)

我有同样的问题。我通过以下

克服了这个问题
 Best to use
    -(void)viewWillLayoutSubviews()
    {
      //........
    }
编码中的

方法。它会自动布局视图。它会根据大小调整大小 视角方向。我在iPhone和iPad上应用了这种方法。它运行得很好。

在此之前你应该遵循以下的事情

1.plist

View controller-based status bar appearance   boolean   NO
在appDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [UIApplication sharedApplication].statusBarHidden=NO;
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    [application setStatusBarHidden:NO];
}

在ViewController中

- (void)viewWillAppear:(BOOL)animated 
{
   [super viewWillAppear:animated];
    //For iPAD I set the bounds because it calls this method,Once it returns from previous view controller or background to foreground
    self.view.bounds = CGRectMake(0, -20, 1024, 768);
}

-(void)viewWillLayoutSubviews
{
    self.view.clipsToBounds = YES;
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenHeight = 0.0;
    screenHeight = screenRect.size.width;
    CGRect screenFrame = CGRectMake(0, 20, self.view.frame.size.width,screenHeight-20);
    CGRect viewFrame1 = [self.view convertRect:self.view.frame toView:nil];
    if (!CGRectEqualToRect(screenFrame, viewFrame1))
    {
        self.view.frame = screenFrame;
        self.view.bounds = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
        NSLog(@"width is - %f",[[self view] bounds].size.width);
        NSLog(@"height is - %f",[[self view] bounds].size.height);
    }
}