【UIKit】解決iOS7狀態欄問題

#pragma mark - 解決iOS7狀態欄問題
- (void)viewWillAppear:(BOOL)animated
{
    // 注意點:自定義佈局方法必須放在隱藏或顯示導航欄(若是有的話)這句話後面,否則會亂;
    self.navigationController.navigationBarHidden = YES;
    // 自定義佈局
    [self autoAdaptionLayer];
}
// 自定義佈局
- (void)autoAdaptionLayer
{
    // 若是是IOS7.0以上
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)
    {
        self.edgesForExtendedLayout = UIRectEdgeNone;                   // 非全屏佈局
        self.extendedLayoutIncludesOpaqueBars = NO;                     // 當導航欄使用不透明圖片,View不延伸之Bar下面
        self.modalPresentationCapturesStatusBarAppearance = NO;
        [self setNeedsStatusBarAppearanceUpdate];                       // 設置StatusBar的樣式
        
        CGRect viewBounds = self.view.bounds;
        
        // ******* 這個修訂很重要 *******
        if(viewBounds.size.height == 548)
            viewBounds.size.height = 568;
        if(viewBounds.size.height == 460)
            viewBounds.size.height = 480;
        
        CGFloat topBarOffset = 0; // self.topLayoutGuide.length;
        CGFloat myHeight = viewBounds.size.height;
        // 存在導航欄控制器
        if (self.navigationController)
        {
            // 導航欄隱藏的時候(底部空間高度須要-20)
            if (self.navigationController.navigationBarHidden)
            {
                viewBounds.origin.y = topBarOffset - 20;
                viewBounds.size.height = myHeight - 20;
            }
            else  // 導航欄顯示的時候(底部空間高度須要-84)
            {
                viewBounds.origin.y = topBarOffset * -1;
                viewBounds.size.height = myHeight - 64;
            }
        }
        else
        {
            viewBounds.origin.y = topBarOffset -20;
            viewBounds.size.height = myHeight - 20;
        }
        self.view.bounds = viewBounds;
    }
    // IOS7.0如下
    else
    {
        CGRect viewBounds = self.view.bounds;
        
        // ******* 這個修訂很重要 *******
        if(viewBounds.size.height == 548)
            viewBounds.size.height = 568;
        if(viewBounds.size.height == 460)
            viewBounds.size.height = 480;
        
        CGFloat myHeight = viewBounds.size.height;
        // 判斷是否存在導航欄控制器
        if (self.navigationController)
        {
            // 導航欄隱藏的時候(底部空間高度須要-20)
            if (self.navigationController.navigationBarHidden)
            {
                viewBounds.size.height = myHeight;
            }
            else  // 導航欄顯示的時候(底部空間高度須要-22)
            {
                viewBounds.size.height = myHeight - 22;
            }
        }
        else
        {
            viewBounds.size.height = myHeight;
        }
        self.view.bounds = viewBounds;
    }
}
// 設置StatusBar的樣式
// 上面這句方法用於刷新顯示statusBar的樣式和是否隱藏,若是須要就在當前使用的VC中重寫下面兩個方法
- (UIStatusBarStyle)preferredStatusBarStyle
{
    // UIStatusBarStyleDefault
    // UIStatusBarStyleLightContent
    // UIStatusBarStyleBlackTranslucent
    // UIStatusBarStyleBlackOpaque
    return UIStatusBarStyleLightContent;  // 會屢次調用
}
- (BOOL)prefersStatusBarHidden
{
    return NO; // 會屢次調用
}
相關文章
相關標籤/搜索