[ios] iOS 7에서 상태 표시 줄 배경색과 텍스트 색상을 변경하는 방법은 무엇입니까?

내 현재 애플리케이션은 iOS 5 및 6에서 실행됩니다.

탐색 표시 줄은 주황색이고 상태 표시 줄은 검은 색 배경색과 흰색 텍스트입니다. 그러나 iOS 7에서 동일한 응용 프로그램을 실행하면 상태 표시 줄이 탐색 표시 줄과 동일한 주황색 배경색으로 투명하게 보이고 상태 표시 줄 텍스트 색이 검은 색으로 보입니다.

이로 인해 상태 표시 줄과 탐색 표시 줄을 구분할 수 없습니다.

상태 표시 줄을 iOS 5 및 6에서와 같이 검정색 배경색과 흰색 텍스트 색상으로 표시하려면 어떻게해야합니까? 프로그래밍 방식으로 어떻게 할 수 있습니까?



답변

경고 : iOS 13 및 Xcode 11에서는 더 이상 작동하지 않습니다.

================================================ ======================

나는 다른 방법을 찾아야했다. addSubview창문 에는 관여하지 않습니다 . 키보드가 나타나면 창 위로 이동하기 때문입니다.

목표 -C

- (void)setStatusBarBackgroundColor:(UIColor *)color {

    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        statusBar.backgroundColor = color;
    }
}

빠른

func setStatusBarBackgroundColor(color: UIColor) {

    guard  let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else {
        return
    }

    statusBar.backgroundColor = color
}

스위프트 3

func setStatusBarBackgroundColor(color: UIColor) {

    guard let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView else { return }

    statusBar.backgroundColor = color
}

이 양식을 호출하는 것이 application:didFinishLaunchingWithOptions저에게 효과적이었습니다.

NB이 로직을 사용하는 앱이 앱 스토어에 있습니다. 그래서 앱 스토어 정책은 괜찮은 것 같아요.


편집하다:

자신의 책임하에 사용하십시오. 댓글 작성자 @Sebyddd 구성

한 앱이이 원인을 거부하고 다른 앱은 정상적으로 허용되었습니다. 그들은 그것을 개인 API 사용으로 간주하므로 검토 과정에서 운이 좋을 것입니다. 🙂 – Sebyddd


답변

앱이 고토 info.plist

1) 설정 View controller-based status bar appearanceNO
2) 세트 Status bar styleUIStatusBarStyleLightContent

다음과 앱 위임 고토 당신이 당신의 윈도우의 RootViewController을 설정하려면 다음 코드를 붙여 넣습니다.

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
    UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 20)];
    view.backgroundColor=[UIColor blackColor];
    [self.window.rootViewController.view addSubview:view];
}

도움이되기를 바랍니다.


답변

iOS 7에서 상태 표시 줄의 배경색을 처리하는 동안 2 가지 경우가 있습니다.

사례 1 : 탐색 모음이있는보기

이 경우 viewDidLoad 메서드에서 다음 코드를 사용하십시오.

 UIApplication *app = [UIApplication sharedApplication];
 CGFloat statusBarHeight = app.statusBarFrame.size.height;

 UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
 statusBarView.backgroundColor = [UIColor yellowColor];
 [self.navigationController.navigationBar addSubview:statusBarView];

사례 2 : 탐색 모음없이보기

이 경우 viewDidLoad 메서드에서 다음 코드를 사용하십시오.

 UIApplication *app = [UIApplication sharedApplication];
 CGFloat statusBarHeight = app.statusBarFrame.size.height;

 UIView *statusBarView =  [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
 statusBarView.backgroundColor  =  [UIColor yellowColor];
 [self.view addSubview:statusBarView];

소스 링크 http://code-ios.blogspot.in/2014/08/how-to-change-background-color-of.html


답변

1) plist에서 UIViewControllerBasedStatusBarAppearance를 YES로 설정하십시오.

2) viewDidLoad에서 [self setNeedsStatusBarAppearanceUpdate];

3) 다음 방법을 추가하십시오.

 -(UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleLightContent;
 }

업데이트 :
또한 확인 개발자 가이드 – 투 – IOS-7-상태 표시 줄을


답변

애플리케이션 시작 중 또는 뷰 컨트롤러의 viewDidLoad 중에 상태 표시 줄의 배경색을 설정할 수 있습니다.

extension UIApplication {

    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }

}

// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
        return true
    }
}


or
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
    }

}

결과는 다음과 같습니다.

여기에 이미지 설명 입력

다음은 상태 표시 줄 변경에 대한 Apple 지침 / 지침 입니다. 상태 표시 줄에는 어둡고 밝게 (중 및 검은 색) 만 허용됩니다.

다음은 상태 표시 줄 스타일을 변경하는 방법입니다.

상태 표시 줄 스타일을 설정 UIViewControllerBasedStatusBarAppearance하려면 애플리케이션 레벨을 NO`.plist ‘파일에서 로 설정 하십시오.

상태 표시 줄 스타일을 설정하려면 뷰 컨트롤러 수준에서 다음 단계를 따르세요.

  1. 설정 UIViewControllerBasedStatusBarAppearanceYES.plist당신의 UIViewController 수준 만 설정 상태 표시 줄 스타일을 필요로하는 경우, 파일.
  2. viewDidLoad 추가 기능에서- setNeedsStatusBarAppearanceUpdate

  3. 뷰 컨트롤러에서 preferredStatusBarStyle을 재정의하십시오.

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}


답변

iOS 7에서는 상태 표시 줄에 배경이 없으므로 20px 높이의 검은 색보기를 뒤에 배치하면 iOS 6과 동일한 결과를 얻을 수 있습니다.

또한 당신은 읽을 수 있습니다 주제에 대한 자세한 내용 iOS 7 UI 전환 가이드 .


답변

ViewDidLoad 메서드에 다음을 작성하십시오.

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) {
    self.edgesForExtendedLayout=UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars=NO;
    self.automaticallyAdjustsScrollViewInsets=NO;
}

나에 대한 상태 표시 줄 색상과 다른 UI 위치도 어느 정도 수정되었습니다.