[ios] iOS 7-상태 표시 줄이보기와 겹침

나는이 ViewController돌며이다 UINavigationcontroller, 그러나 내비게이션 바는 숨겨져 있습니다. iOS 7에서 앱을 실행하면보기 상단에 상태 표시 줄이 표시됩니다. 이것을 피할 수있는 방법이 있습니까?

OS 별 코드를 작성하고 싶지 않습니다.

여기에 이미지 설명 입력

로 설정 View controller-based status bar appearance을 시도했지만 NO문제가 해결되지 않았습니다.



답변

Xcode 5는 iOS 6/7 Deltas이 문제를 해결하기 위해 특별히 제작되었습니다. 스토리 보드에서 iOS 7에서 제대로 보이도록 뷰를 20 픽셀 아래로 이동했고 iOS 6과 호환되도록 Delta y하기 위해 -20으로 변경 했습니다.

여기에 이미지 설명 입력

내 스토리 보드가 자동 레이아웃을 사용하지 않기 때문에, 아이폰 OS 6 I에서 제대로 뷰의 높이의 크기를 조정하기 위해 설정했다 Delta height뿐만 아니라 Delta Y.


답변

상태 표시 줄을 전혀 원하지 않는 경우 다음 데이터로 plist를 업데이트해야합니다. 이렇게하려면 plist에서 다음 두 가지 설정을 추가합니다.

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

iOS 7에서는 오버레이 투명 상태 표시 줄을 염두에두고 앱을 디자인해야합니다. 예를 들어 새로운 iOS 7 날씨 앱을 참조하십시오.


답변

이것은 UIViewControlleriOS 7의 기본 동작입니다 .보기는 전체 화면이되며 이는 상태 표시 줄이보기의 상단을 덮을 것임을 의미합니다.

당신이있는 경우 UIViewControllerUINavigationController와 내비게이션 바는 볼 수, 당신은 당신의 다음 코드를 가질 수 viewDidLoad또는 내비게이션 바 트릭을 할 배경 이미지를 가지고있다.

self.edgesForExtendedLayout = UIRectEdgeNone;

navigationBar를 숨긴 경우 20 포인트를 이동하여 모든 UIView 요소를 조정해야합니다. 다른 해결책은 보이지 않습니다. 자동 레이아웃을 사용하면 조금 도움이됩니다.

이전 버전과의 호환성을 원하는 경우 iOS 버전을 감지하는 샘플 코드는 다음과 같습니다.

NSUInteger DeviceSystemMajorVersion() {
    static NSUInteger _deviceSystemMajorVersion = -1;
    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
        NSString *systemVersion = [UIDevice currentDevice].systemVersion;
        _deviceSystemMajorVersion = [[systemVersion componentsSeparatedByString:@"."][0] intValue];
    });

   return _deviceSystemMajorVersion;
}


답변

내가 만든 유일한 솔루션입니다.

내 UIViewController 하위 클래스 https://github.com/comonitos/ios7_overlaping

UIViewController의 하위 클래스 1 개

2 해당 클래스에서 window.rootViewController를 하위 클래스로 지정합니다.

3 짜잔!

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
        CGRect screen = [[UIScreen mainScreen] bounds];
        if (self.navigationController) {
            CGRect frame = self.navigationController.view.frame;
            frame.origin.y = 20;
            frame.size.height = screen.size.height - 20;
            self.navigationController.view.frame = frame;
        } else {
            if ([self respondsToSelector: @selector(containerView)]) {
                UIView *containerView = (UIView *)[self performSelector: @selector(containerView)];

                CGRect frame = containerView.frame;
                frame.origin.y = 20;
                frame.size.height = screen.size.height - 20;
                containerView.frame = frame;
            } else {
                CGRect frame = self.view.frame;
                frame.origin.y = 20;
                frame.size.height = screen.size.height - 20;
                self.view.frame = frame;
            }
        }
    }
}

4 [self.window makeKeyAndVisible] 바로 뒤에 상태 표시 줄을 흰색으로 만들려면 이것을 추가합니다. !!!

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}


답변

-(UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

-(void)viewWillLayoutSubviews{

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)
  {
    self.view.clipsToBounds = YES;
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenHeight = 0.0;
    if(UIDeviceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]))
        screenHeight = screenRect.size.height;
    else
        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);
    }
  }
}

plist에 키 추가 —보기 컨트롤러 기반 상태 표시 줄 모양 : 아니요


답변

ios7에서 상태 표시 줄을 숨기려면 다음 간단한 단계를 따르세요.

Xcode에서 ” Resources“폴더로 이동하여 ” (app name)-Info.plist file“를 엽니 다 .

  • View controller based status bar appearance“키를 확인 하고 값을 ” NO“로 설정하십시오.
  • Status bar is initially hidden“키를 확인 하고 값을 ” YES“로 설정하십시오.

키가 없으면 information property list상단에서 ” “를 선택 하고 + 아이콘을 클릭 하여 추가 할 수 있습니다.


답변

완전히 숨기고 처리하지 않으려면 잘 작동합니다.

-(BOOL) prefersStatusBarHidden
{
    return YES;
}

참조 https://stackoverflow.com/a/18873777/1030449