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 hiddenYES .
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 appearanceNO.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.