iOS7에서 상태 표시 줄을 숨길 수 없습니다


267

방금 iPhone 5 iOS 7을 4 개의 베타 버전으로 업그레이드했습니다. 이제이 iPhone의 Xcode 5에서 내 응용 프로그램을 실행하면 상태 표시 줄이 숨겨져 있지 않아도 숨겨지지 않습니다.

작동하지 않는:

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

작동하지 않는:

[UIApplication sharedApplication].statusBarHidden = YES;

Apple 개발자 포럼에 로그인 할 수 없습니다


15
사실, 내 대답은 Xcode와 관련이 있으며 일반 대중에게 나타났습니다. '이 답변에 응하면 NDA의 위반입니다'라고 말하는 것이 너무 일반적입니다. 개발자가 스스로 결정할 수 있도록 ;-)
— Jake


프로그래밍 방식으로 특정 ViewController 상태 표시 줄을 숨기는 방법?
— bhavik

답변:


558

앱 plist 파일에서 행을 추가하여 "컨트롤러 기반 상태 표시 줄 모양보기"라고 부르고 NO로 설정하십시오.

앱에서 UIImagePickerController를 사용하는 경우에는 작동하지 않습니다.

에서 http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/ , mgiroux의 솔루션

Xcode의 정보 설정에 View Base Controller를 추가하는 예


3
놀랄 만한! 나는 이것에 시간을 낭비한다! 감사합니다!
— Idan

12
참고로 실제 Info.plist 파일에 저장된 원시 값을이라고 UIViewControllerBasedStatusBarAppearance합니다.
— Adam Rosenfield 18

55
이 접근 방식의 유일한 문제는 UIImagePickerController를 사용하여 이미지를 선택하면 상태 표시 줄이 한 번 더 나타납니다.이를 방지하는 유일한 방법은 각보기 컨트롤러에서 prefersStatusBarHidden 메서드를 구현하고 UIViewControllerBasedStatusBarAppearance를 재설정하는 것입니다 plist 설정이 true입니다.
— Jason Fuerstenberg

5
나는 왜 애플이 이것을 바꾸 었는지 모르겠다! 감사합니다 :)
— Mohamed Amine

18
또한 세트에 필요 Status bar is initially hidden로 YES .
— Zorayr

277

뷰 컨트롤러에 메소드를 추가하십시오.

- (BOOL)prefersStatusBarHidden {
    return YES;
}

35
찾고있는 모든 사람들에게 특정보기에서 상태 표시 줄을 동적으로 제거하려는 경우이 방법입니다. 이 방법은 plist에서 "컨트롤러 기반 상태 표시 줄보기"설정에 관계없이 작동합니다!
— Mr. T

2
+1 b / c 상태 표시 줄을 동적으로 표시하거나 숨길 수있는 기능을 찾고 있습니다. 그러나 P- 목록 설정 방법 (위의 @Satgi의 게시물 참조)은 상태 표시 줄을 전체적으로 표시하거나 숨기는 가장 좋은 방법입니다.
— JonnyB

어딘가에 사진 갤러리가있는 경우 일반적으로 컨트롤 만 숨기고 싶거나 끌 수도 있습니다. 이것은 나를 위해 작동하지 않으며, 함수는 호출되지 않습니다. 같은 장소에 preferredStatusBarStyle이 있으며
— Cristi Băluță

4
@ Mr.T iOS 8에서는 더 이상 그렇지 않습니다. 뷰 컨트롤러 기반 상태 표시 줄 모양을 NO로 설정하고 prefersStatusBarHidden뷰 컨트롤러에서 true를 반환 하면 작동하지 않습니다. 상태 표시 줄이 계속 나타납니다.
— Isuru

1
@Isuru 왜 NO로 설정 했습니까? YES로 설정하면 다른 모든 경우에 모든 뷰 컨트롤러에 요청합니다.
— invoodoo

84

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

-> Status bar is initially hidden= 예

-> View controller-based status bar appearance= 아니요

둘 다 추가하십시오-이제 상태 표시 줄이 사라집니다.


네, 이것은 저에게도 효과적이었습니다. "상태 표시 줄이 처음 숨겨 짐"옵션을 YES로 설정하지 않으면 예상대로 작동하지 않습니다. 고마워.
— AndrewShmig

53

단일보기에서 상태 표시 줄을 숨기려면 다음을 사용해야합니다.

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

처음에는 이것이 나를 위해 작동하지 않았 으며이 방법의 설명서에서 다음과 같은 내용을 보았습니다.

이 키 View controller-based status bar appearance세트를에 추가하여 plist 파일에서 수행 해야 NO합니다. 그리고는 효과가있었습니다.


16

레거시 UIApplication 메서드를 사용하여 상태 표시 줄을 숨기거나 표시하려면 앱에서 iOS 7의 plist 값을 설정해야합니다.

View-Controller Based Status Bar Appearance = NO

이 값은 기본적으로 YES로 설정되어 있습니다. NO로 변경하면 레거시 방법을 사용할 수 있습니다. YES로 설정하면 상태 표시 줄을 숨길 수는 있지만 앱의 각 뷰 컨트롤러 하위 클래스가 재정 의하여 prefersStatusBarHiddenYES를 반환합니다.

앱에 상태 표시 줄 모양이나 가시성이 변경되어야하고 View-Controller Based Status Bar Appearance가 YES로 설정 될 때마다 가장 바깥 쪽보기 컨트롤러는 다음을 호출해야합니다.

setNeedsStatusBarAppearanceUpdateAnimation


일반 PLIST에서 작동하지 않았다 때문에, 사용자 정의 아이폰 OS 대상 속성에 적용해야했다
— xarly

16

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

  1. 응용 프로그램 : (UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions쓰기

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

    View-Controller Based Status Bar Appearance = NO

2
그냥 당신이 didFinishLaunching이 내부를 넣어하는 경우 당신은 그냥 쓸 수 있습니다,이 최대를 청소 [application setStatusBarHidden:YES];또는application.statusBarHidden = YES;
— joel.d

위의 답변에 오타가있을 수 있습니다. "보기 컨트롤러 기반 상태 표시 줄 모양 = 아니요"가 작동하지 않지만 "보기 컨트롤러 기반 상태 표시 줄 모양 = 아니요"가 작동했습니다.
— tmr

11

이 문제에 대해 제안 된 많은 조합이 있지만 문제는 iOS 6과 7이 다른 방법을 사용하여 상태 표시 줄을 숨기는 것입니다. iOS 7에서 iOS6 스타일 동작을 사용하도록 plist 설정을 설정 한 적이 없었지만 iOS 6 이상을 지원하도록 앱을 빌드하는 경우 특정 뷰 컨트롤러가 상태를 숨기려면 한 번에 3 가지 방법을 사용해야합니다 바:

// for ios 7 
- (BOOL)prefersStatusBarHidden{
    return YES;
}

// for ios 6
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // explicitly set the bar to show or it will remain hidden for other view controllers
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

이것은 plist 설정에 관계없이 작동합니다.


7

상태 표시 줄을 숨기려면 아래 두 가지 변경을 모두 수행해야했습니다.

상태 표시 줄을 숨길 뷰 컨트롤러에이 코드를 추가하십시오.

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

이것을 .plist 파일에 추가하십시오 (응용 프로그램 설정에서 'info'로 이동하십시오)

View controller-based status bar appearance --- NO

그런 다음이 회선을 호출하여 상태 표시 줄을 숨길 수 있습니다.

[[UIApplication sharedApplication] setStatusBarHidden:YES];

6

info.plist 파일에이 두 줄을 추가하십시오. iOS7 및 이전 버전 모두를 수정합니다.

  • 상태 표시 줄은 처음에 숨겨져 있습니다 = YES
  • 컨트롤러 기반 상태 표시 줄보기 = NO

프로젝트로 이동하여 대상-> 일반을 선택하고 "응용 프로그램 실행 중 상태 표시 줄 스타일 ... 숨기기"확인란이 선택되어 있는지 확인하십시오. 작동합니다.


6

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

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

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

4

나를 위해 일한 유일한 것은 plist에 다음을 추가하는 것입니다.

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

4

전체 앱에서 상태 표시 줄을 숨기는 가장 쉬운 방법은 categoryon을 UIViewController만들고 재정의하는 것 prefersStatusBarHidden입니다. 이렇게하면 모든 단일 뷰 컨트롤러에서이 메서드를 작성할 필요가 없습니다.

UIViewController + HideStatusBar.h

#import <UIKit/UIKit.h>

@interface UIViewController (HideStatusBar)

@end

UIViewController + HideStatusBar.m

#import "UIViewController+HideStatusBar.h"

@implementation UIViewController (HideStatusBar)

//Pragma Marks suppress compiler warning in LLVM. 
//Technically, you shouldn't override methods by using a category, 
//but I feel that in this case it won't hurt so long as you truly 
//want every view controller to hide the status bar. 
//Other opinions on this are definitely welcome

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

#pragma clang diagnostic pop


@end

최고의 실제, iOS7, 비 Fakey 솔루션
— Fattie

3
  1. plist에서 ----를 추가하십시오

    컨트롤러 기반 상태 표시 줄보기 --- 아니요

  2. 각 viewController 쓰기에서

    - (void) viewDidLayoutSubviews
    {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = 20.0;
        viewBounds.origin.y = -topBarOffset;
        self.view.bounds = viewBounds;
    
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//for status bar style
    }

iOS 7의 상태 표시 줄 문제이지만 앱의 대상은 5.1 이상이어야합니다.


3

이 스레드에 대한 많은 답변이 작동하지만 결국 동적으로 호출 해야하는 작업을 수행하려는 경우 내 이해입니다.

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

3

iOS 7에서 상태 표시 줄 숨기기 단계 :

1. 응용 프로그램 info.plist 파일로 이동하십시오.

2. 및 설정, 컨트롤러 기반 상태 표시 줄보기 : 부울 NO

상태 표시 줄 문제를 해결하기를 바랍니다 .....


3

단일보기의 iOS 7의 경우 viewWillappear 메소드에서 사용하십시오.

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

상태 표시 줄을 표시하려면 다음을 사용하십시오.

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];


2

정보 Plist 파일에서 다음 특성에 대한 행 추가

속성 이름 : 컨트롤러 기반 상태 표시 줄보기

값 : NO


1

앱의 루트 뷰 컨트롤러에 다음 방법을 추가하십시오.

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }

1

내 프로젝트에 여기에 게시 된 모든 옵션을 시도했지만 작동하지 않습니다. 나는 내 Xcode앱을 업데이트 한 다음 iOS 7로 앱을 업데이트 하고 일부 설정이 어딘가에 엉망 이되었다는 사실과 관련이 있다고 생각했습니다 . 나는 그것을 위해 완전히 새로운 프로젝트를 구축하기로 결정했고, 간단하게 설정 한 후에 " Status bar is initially hidden = YES"와 " View controller-based status bar appearance = NO"많은 사람들이 말한대로 올바르게 작동했습니다 (예 : 상태 표시 줄 없음).

따라서 이전 버전에서 iOS 7로 업데이트되고 다른 모든 옵션을 시도한 프로젝트에서 작업하는 경우 내 조언은 새 프로젝트를 작성하는 것입니다.


이 같은 기술을 사용하여 처음에는 모든 화면에서 상태 표시 줄을 전체적으로 숨길 수 있음을 확인했지만 내 앱이 "시간 중심"이므로 대부분의 화면에 시간 표시를 원했습니다. 여러 가지 이유로 제외하려는 화면은 하나뿐입니다. 나는 당신의 매개 변수의 반대를 사용하여 끝났습니다 : 처음에는 숨겨진 = 아니오 & VC 기반 상태 표시 줄 모양 = 예. 그런 다음 (BOOL) prefersStatusBarHidden 메서드 (YES를 반환)를 숨기고 싶은 하나의 VC에 넣어야했습니다. 잘 작동합니다. 다른 이유로 내 앱이 iOS7 전용임을 추가해야합니다.
— bobsmells 16:12의

1

2019 년 ...

상태 표시 줄이없는 앱을 만들려면

info.plist를 클릭하고 "행 추가"를 마우스 오른쪽 단추로 클릭하십시오.

다음 설정을 사용하여이 두 가지를 추가하십시오.

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

그것이 전부입니다.




0

특정 viewController에 대한 상태 표시 줄을 숨기려면

- (BOOL)prefersStatusBarHidden {
    return YES;
}

응용 프로그램에 대해 숨겨진 상태 표시 줄을 설정하려면 :

  • 세트 View controller-based status bar appearance에 NO.plist와의 application: didFinishLaunchingWithOptions:세트 : [application setStatusBarHidden:YES];

    참고 : setStatusBarHidden : 사용되지 않음

또는

  • 프로젝트 설정-> 일반 탭-> 배포 정보

    확인 Hide Status bar상자를.


-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}

질문은이 접근법이 작동하지 않는다고 명시 적으로 언급합니다. 대답하기 전에 질문을주의 깊게 읽으십시오.
— Borys Verebskyi

View 컨트롤러 기반 상태 표시 줄 모양이 NO로 설정되어 있으면 가장 깔끔한 방법입니다.
— Evan Ische

-7

왜 "Apple 개발자 포럼에 로그인 할 수 없는지"잘 모르겠지만 (NDA를 위반하지 않고) Xcode를 통해 statusBar를 숨길 수도 있습니다. 응용 프로그램 대상의 일반적인 설정입니다.여기에 이미지 설명을 입력하십시오


아니, 매력처럼 작동합니다. 포럼은 지금 잠시 동안 있었다.
— Jake
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.