iOS 상태 표시 줄을 숨기는 방법


219

내 iOS 비디오 앱 상태 표시 줄이 일부보기 컨트롤러에 숨겨져 있습니다. 다음 코드를 사용 하여이 작업을 수행했습니다.

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • iOS 5 및 iOS 6에서는 작동하지만 iOS 7에서는 작동하지 않습니다.

  • 특정 뷰 컨트롤러 에서이 작업을 시도했지만

예 :

-(BOOL)prefersStatusBarHidden { return YES; }

잘 작동하지만 부모보기 컨트롤러에서 상태 표시 줄을 다시 표시 할 수 없습니다.



1
스토리 보드에서 상태 표시 줄 스타일을 설정 한 경우 "보기 컨트롤러 기반 상태 표시 줄"(아래)을 변경 한 후에는보기 컨트롤러 설정이 더 이상 사용되지 않으므로 plist에서 스타일을 설정해야합니다. stackoverflow.com/questions/18924345/…
Matt

1
다른 질문에 대답했습니다. 이 시도. [프로그래밍 방식으로 상태 표시 줄을 숨기는 가장 쉬운 방법] [1] [1] : stackoverflow.com/a/27339754/3718498
wataru

1
내가 포드로 출판 - 나는 그것을 위해 트릭을 사용 cocoapods.org/pods/UIViewController+ODStatusBar 나는 누군가를 위해 도움이 될 것입니다 희망
알렉스 Nazarsky

여기서 답변은 더 이상 사용되지 않습니다. 발사 화면에 대한 상태 표시 줄 숨길 때 iOS 9에 대한 정답을 찾는 데 어려움이 있었 으므로 아래 링크를 통해 다른 사람들이 그 방법을 쉽게 찾을 수 있기를 바랍니다. stackoverflow.com/questions/34413848/…
Ben

답변:


277

이 값을 plist에 추가해야합니다. " 제어기 기반 상태 표시 줄보기 "및 " NO "로 설정하십시오 .

여기에 이미지 설명을 입력하십시오


40
참고로, 원시 키는UIViewControllerBasedStatusBarAppearance
윌리엄 Denniss

1
@ Rajneesh071 작업에 preferredStatusBarStyle을 설정하려면 "View controller-based status bar appearance" set it to "YES".어떻게 해야 합니까?
Bimawa


어떤 문제에 직면하고 있습니까?
Rajneesh071

더 이상 사용되지 않는 것으로 보입니다. 앱이 중단됩니다
Ben

194

Info.plist에 다음을 추가하십시오.

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

영상


Xcode 11.3, iOS 13에서 훌륭하게 작업
Wayne Henderson

113

viewdidload에 다음 줄 추가

  [[UIApplication sharedApplication] setStatusBarHidden:YES
                                        withAnimation:UIStatusBarAnimationFade];

새로운 방법을 추가

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

info.plist 파일 변경 컨트롤러 기반 상태 표시 줄 모양보기 "= 아니요

나를위한 작품


고맙습니다. 이것은 나를 위해 일하지만 plist에 아래 행을 추가해야합니다. "컨트롤러 기반 상태 표시 줄보기"= 아니요 i, e viewdidload에 다음 줄 추가 [[UIApplication sharedApplication] setStatusBarHidden : YES withAnimation : UIStatusBarAnimationFade]; 새 메소드 추가-(BOOL) prefersStatusBarHidden {return YES; } PLIST 파일에서 "보기 컨트롤러 기반 상태 표시 줄 모양"= NO 추가
모래

prefersStatusBarHidden나를 위해 속임수는 무엇입니까 (다른 비슷한 솔루션을 사용 하여이 솔루션에 관계없이)
Abdo

34

Plist에서 다음 특성을 추가하십시오.

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

이제 상태 표시 줄이 숨겨집니다.


8
원시 키는 UIStatusBarHidden 및 UIViewControllerBasedStatusBarAppearance
leolobato입니다.

27

이 간단한 방법을 사용해보십시오.


목표 -C :

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated]
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated]
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}

빠른:

override func viewWillAppear(animated: Bool) 
{
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) 
{
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

1
이것은 훌륭한 답변이었습니다! 또한 다양한 UIStatusBarAnimations로 시도해보십시오 . 꽤 좋습니다.
VedTopkar 1

잊지 마세요 [super viewWillAppear:animated][super viewWillDisappear:animated]
SAMB

1
이 간단한 솔루션은 iOS 10에서 효과적이었습니다. 단순한 사람이되는 길!
coolcool1994

14

나는 다음을했고 그것이 작동하는 것처럼 보입니다 (iOS 8에서도).

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}

12
  • UIApplication.setStatusBarX는 iOS9부터 사용되지 않습니다.
  • info.plist에서 UIViewControllerBasedStatusBarAppearance = NO를 사용하는 것이 더 이상 사용되지 않습니다.
  • 모든 뷰 컨트롤러에서 preferredStatusBarX를 사용해야합니다

그러나 UINavigationController가 있으면 더 흥미로워집니다.

  • navigationBarHidden = true 인 경우 자식이 상태 표시 줄 아래에 내용을 표시하므로 자식 UIViewController의 preferredStatusBarX가 호출됩니다.
  • navigationBarHidden = false이면 UINavigationController의 preferredStatusBarX가 호출되고 결국 상태 표시 줄 아래에 컨텐츠가 표시됩니다.
  • UINavigationController의 기본 preferenceStatusBarStyle은 UINav.navigationBar.barStyle의 값을 사용합니다. .Default = 검정 상태 표시 줄 내용, .Black = 흰색 상태 표시 줄 내용.
  • 따라서 barTintColor를 사용자 정의 색상 (가능한 경우)으로 설정하는 경우 흰색 상태 표시 줄 컨텐츠를 가져 오려면 barStyle을 .Black으로 설정해야합니다. barStyle이 barTintColor를 재정의하는 경우 barTintColor를 설정하기 전에 barStyle을 검은 색으로 설정했습니다.
  • 다른 방법은 막대 스타일을 사용하지 않고 UINavigationController를 서브 클래 싱 할 수 있다는 것입니다.
  • 그러나 UINavigationController를 서브 클래 싱하는 경우 navigationBarHidden = true 인 경우 상태 표시 줄을 제어 할 수 없습니다. 어떻게 든 UIKit 은이 상황에서 UINavigationController를 묻지 않고 자식 UIViewController로 직접 이동합니다. 나는 아이에게> shrugs <를 요구하는 것이 UINavigationController의 책임이어야한다고 생각했을 것이다.
  • 그리고 modalPresentationStyle = .FullScreen 인 경우 모달 표시 UIViewController 만 상태 표시 줄에 의견을 얻습니다.
  • 사용자 정의 프리젠 테이션 스타일 모달 뷰 컨트롤러가 있고 실제로 상태 표시 줄을 제어하려는 경우 modalPresentationCapturesStatusBarAppearance = true로 설정할 수 있습니다.

사과가 왜 한 가지 조언을 따를 수 없습니까? 손상되지 않은 경우 수정하지 마십시오!
Jargen89

9

iOS7에서 상태 표시 줄을 숨기려면 2 줄의 코드가 필요합니다

  1. 응용 프로그램에서 : (UIApplication *) application didFinishLaunchingWithOptions : (NSDictionary *) launchOptions write

     [[UIApplication sharedApplication] setStatusBarHidden:YES];
    
  2. info.plist에 이것을 추가하십시오

     View-Controller Based Status Bar Appearance = NO
    

8

이해를 돕기 위해 주석이 달린 사진을 추가하십시오.

변경 전 앱

여기에 이미지 설명을 입력하십시오

귀하의 Project Navigator폴더 Supporting Files에서 * .plist 파일을 클릭하십시오.

여기에 이미지 설명을 입력하십시오

당신은 당신의 응용 프로그램의 다른 설정을 얻을 것이다 후. 당신은이 키를 추가해야 UIStatusBarHidden하고 UIViewControllerBasedStatusBarAppearance. + 버튼을 클릭하면됩니다.

여기에 이미지 설명을 입력하십시오

+를 누른 후 키 중 하나를 선택할 수 있습니다. 입력하기 만하면됩니다.

올바른 버전 :

여기에 이미지 설명을 입력하십시오

마지막으로이 변경 사항을 적용한 후 적용하십시오.

여기에 이미지 설명을 입력하십시오

또한 여기에서 대체 솔루션을 찾을 수 있습니다


8

iOS10에서 내가해야 할 일은 prefersStatusBarHiddenRootViewController(Swift) 의 var를 재정의하는 것입니다 .

override var prefersStatusBarHidden: Bool {
    return true
}

7

시도해보십시오.

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];

큰. 이것을 사용하여 뷰 컨트롤러에서 상태 표시 줄을 숨기고 필요하지 않은 경우 사용자가 로그인하면
숨길 수

5

iOS7에서 상태 표시 줄을 숨기려면

plist-file을 연 다음 "컨트롤러 기반 상태 표시 줄보기" 라는 행을 추가 하고 값을로 설정하십시오 NO.


5

Swift 버전 (iOS9 이전)은 다음과 같습니다.

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

이것은 또한 작동합니다 (iOS7 +) :

override func prefersStatusBarHidden() -> Bool {
    return true
}

또한 전화해야합니다 :

setNeedsStatusBarAppearanceUpdate()

말하십시오 viewDidLoad().

SplitView 컨트롤러 또는 다른 container뷰 컨트롤러 를 사용하는 경우 전송시 클래스를 반환해야합니다 childViewControllerForStatusBarHidden. 이를 수행하는 한 가지 방법은 say statusController에 대해 약한 var를 사용 하고이 재정의 된 방법으로 반환하는 것입니다.


1
상단 블록은 iOS8에서 더 이상 사용되지 않습니다. 두 번째 방법을 사용하십시오. 그리고 감사합니다! 다른 필수 호출을 추가하기 위해 코드를 편집했습니다.
David H

5

iOS 9 이상 :

으로 statusBarHidden방법은 한 추천하지 않습니다 에서 iOS9 아래로 PLIST에서 두 값을 추가해야합니다 :

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

또는 사용자 인터페이스로 이미지를 아래에 나타내십시오.

여기에 이미지 설명을 입력하십시오

statusBarHidden되어 사용되지 않는 에서 iOS9 :

@property (readwrite, nonatomic, getter = isStatusBarHidden) BOOL statusBarHidden NS_ DEPRECATED _IOS (2_0, 9_0 , "사용-[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;


5

SWIFT 3+ 용 고정 솔루션 (iOS 9, 10)

1- info.plist에서 속성 아래 설정

여기에 이미지 설명을 입력하십시오

2- 아래 코드를 루트 컨트롤러에 붙여 넣습니다.

 private var isStatusBarHidden = true {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

당신은 호출 할 수 있습니다 isStatusBarHidden = true그리고 isStatusBarHidden = false당신이 원하는 경우 hide/show상태 표시 줄


4

이 값을 plist : "컨트롤러 기반 상태 표시 줄보기"에 추가하고 "NO"로 설정해야합니다.


4

iOS에서 상태 표시 줄 숨기기 단계
1. AppDelegate.m 파일을 열고 didFinishLaunchingWithOptions 메소드에 application.statusBarHidden을 추가하십시오.

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    application.statusBarHidden = YES;
    return YES;
    }
  1. info.plist를 열고 설정

View controller-based status bar appearance 세트 NO


4

스위프트 5

iOS 상태 표시 줄을 숨기려면 다음 단계를 사용하십시오.

  1. Info.plist에서 엽니 다.
  2. 새 키 보기 컨트롤러 기반 상태 표시 줄 모양 및 값을 NO로 설정하십시오 .
  3. 새 키 추가 상태 표시 줄이 처음에 숨겨 지고 값이 YES로 설정됩니다 .
  4. 프로젝트를 다시 컴파일하십시오.
  5. iOS 전화에서 상태 표시 줄이 숨겨집니다.

최종 설정 스크린 샷 :

최종 설정

이것은 Xcode 10.2에서 작동합니다.


2

보낸 사람 UIKit> UIApplication.h:

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);

따라서 View controller-based status bar appearanceNO로 설정해야합니다


2

Susitha의 질문에 대답하려면 setNeedsStatusBarAppearanceUpdate를 사용하십시오 . 그러면 원하는 statusbar 상태로 refresh하기 위해 prefersStatusBarHidden을 호출합니다. 이 시도:

    @property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early

    - (BOOL)prefersStatusBarHidden {
        return self.isHideStatusBar;
    }

    - (void)someMethod {
    // triggered by an event or user action
    [self setHideStatusBar:YES];
    [self setNeedsStatusBarAppearanceUpdate];
    }

상태 표시 줄을 다시 표시하려면 속성 hideStatusBar (또는 호출 한 항목)를 NO로 설정하십시오. 에 대한 다른 호출을 통해 preferStatusBarHidden을 간접적으로 호출

[self setNeedsStatusBarAppearanceUpdate]

1

스위프트 3 업데이트 :

다음 정보로 Info.plist를 업데이트하십시오.

View controller-based status bar appearance: NO

그런 다음 ViewController 또는 다른 곳에서 :

UIApplication.shared.isStatusBarHidden = true

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.