วิธีเปลี่ยนสีข้อความของแถบสถานะใน iOS


990

แอปพลิเคชันของฉันมีพื้นหลังสีดำ แต่ใน iOS 7 แถบสถานะจะโปร่งใส ดังนั้นฉันไม่เห็นอะไรเลยมีเพียงไฟแสดงสถานะแบตเตอรี่สีเขียวที่มุม ฉันจะเปลี่ยนสีข้อความของแถบสถานะเป็นสีขาวเหมือนที่ปรากฏบนหน้าจอหลักได้อย่างไร


9
ลิงค์นี้มีข้อมูลที่น่าสนใจเกี่ยวกับปัญหานี้: doubleencore.com/2013/09/..
Adriano Lucas

คำตอบ:


1380
  1. การตั้งค่าUIViewControllerBasedStatusBarAppearanceไปYESในแฟ้ม .plist

  2. ในการviewDidLoadทำ[self setNeedsStatusBarAppearanceUpdate];

  3. เพิ่มวิธีการต่อไปนี้:

    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }

หมายเหตุ : วิธีนี้ใช้ไม่ได้กับคอนโทรลเลอร์ภายในUINavigationControllerโปรดดูความคิดเห็นของ Tyson ด้านล่าง :)

สวิฟท์ 3 - UINavigationControllerนี้จะควบคุมการทำงานภายใน เพิ่มรหัสนี้ภายในตัวควบคุมของคุณ

// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Swift 5 และ SwiftUI

สำหรับ SwiftUI สร้างไฟล์ swift ใหม่ที่เรียกว่า HostingController.swift

import Foundation
import UIKit
import SwiftUI

class HostingController: UIHostingController<ContentView> {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

จากนั้นเปลี่ยนบรรทัดโค้ดต่อไปนี้ใน SceneDelegate.swift

window.rootViewController = UIHostingController(rootView: ContentView())

ถึง

window.rootViewController = HostingController(rootView: ContentView())

78
ฉันไม่ต้องการขั้นตอนที่ 2
Jason Moore

37
ดูเหมือนจะไม่ทำงานบน iOS 7 Beta 5 ที่มี Xcode5-DP5 PreferredStatusBarStyle ดูเหมือนจะไม่ถูกเรียก
wilsontgh

18
UIViewControllerBasedStatusBarAppearance ถูกเปลี่ยนเป็นดูแถบสถานะตามตัวควบคุมในเมล็ด Xcode 5 จีเอ็ม
parilogic

42
มีคำตอบสำหรับ Xcode GM Seed: 1. ใน Info.plist ให้ดูแถบสถานะตามตัวควบคุมเป็น NO 2. ใน appDelegate ภายในวิธี appDidFinishLaunching ของ appDidFinishLaunching ให้ใส่ [[ลักษณะ UIView] setTintColor: [UIColor whiteColor]
parilogic

101
UINavigationControllerเป็นกรณีพิเศษข้างต้นจะไม่ทำงาน เพิ่งใช้เวลาหลายชั่วโมงเกาหัวของฉันมากกว่านี้ ดูที่นี่สำหรับวิธีแก้ปัญหา: stackoverflow.com/a/19513714/505457
Tyson

848

หรือคุณสามารถเลือกไม่ใช้การปรากฏตัวของแถบสถานะตามมุมมองคอนโทรลเลอร์:

  1. ตั้งView controller-based status bar appearanceไว้NOในของคุณInfo.plistในของคุณ
  2. โทร [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

หมายเหตุ: วิธีนี้เลิกใช้แล้วใน iOS9 ใช้preferredStatusBarStyleบน UIViewController แทน (ดูห้องสมุดนักพัฒนา Apple )


16
นี่เป็นเส้นทางที่ดีและง่ายกว่ามาก
มิกเบิร์น

227
ไม่จำเป็นต้องใช้รหัส มันสามารถทำได้จาก plist: (1) ตั้งค่า "ดูลักษณะแถบสถานะตามตัวควบคุม" เป็น NO และ (2) ตั้งค่า "ลักษณะแถบสถานะ" เป็น "สไตล์ทึบแสงสีดำ" (ค่าดิบคือ UIViewControllerBasedStatusBarAppearance -> NO และ UIStatusBarStyle -> UIStatusBarStyleBlackOpaque)
SwiftArchitect

3
โปรดทราบว่าคุณต้องตั้งค่า info.plist ที่เกี่ยวข้องเป็น NO เพื่อให้สิ่งนี้ทำงานได้
Abhi Beckert

9
@ gothicdev: จับได้ดี จะยอมรับคำตอบของคุณเพราะมันสะอาดที่สุด ตัวเลือกแสงสำหรับสไตล์บาร์อาจเป็น: UIStatusBarStyleLightContent
benka

9
วิธีนี้เลิกใช้แล้วใน iOS 9
lostAtSeaJoshua

439

คุณสามารถทำได้โดยไม่ต้องเขียนโค้ดเลย!
ทำสิ่งต่อไปนี้เพื่อทำให้สีข้อความของแถบสถานะเป็นสีขาวผ่านแอพทั้งหมด

ในไฟล์Plist โครงการของคุณ:

  • สไตล์แถบสถานะ: Transparent black style (alpha of 0.5)
  • ดูลักษณะแถบสถานะตามคอนโทรลเลอร์: NO
  • แถบสถานะถูกซ่อนอยู่ในขั้นต้น: NO

12
ฉันไม่รู้ว่าสิ่งต่าง ๆ เปลี่ยนแปลงหรือไม่ แต่ค่า UIStatusBarStyleLightContent นั้นไม่ได้รับการยอมรับจาก XCode และไม่พบในเอกสารใด ๆ ... แม้ว่าจะดูเหมือนว่าจะใช้งานได้
นาธาน H

5
อันนี้ก็เปลี่ยนมันบนหน้าจอสแปลในขณะที่เพียงแค่ตั้งค่าบนเนวิเกเตอร์จะไม่ ... รุ่งโรจน์!
viniciusnz

3
วิธีที่ง่ายที่สุดในการทำสิ่งนี้อย่างแน่นอนและตามที่กล่าวไว้ยังใช้งานได้บนหน้าจอเริ่มต้น
7 สิ่งมหัศจรรย์

4
ไม่มีสิ่งใดที่ถูกเรียกUIStatusBarStyleLightContentในplist infoHOWEVER Transparent Blackที่ซึ่งจะทำแบบเดียวกัน :) บวกคุณต้องเพิ่มView controller-based status bar appearanceเพราะมันไม่ได้อยู่ที่นั่นและมันคือทั้งหมดที่คุณต้องใช้เพื่อให้มันทำงาน :)
user1949873

45
สำหรับคนขี้เกียจอย่างฉันลองคัดลอกและผ่านไปก่อน: <key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
Adam Waite

241

หมายเหตุ: คำตอบ upvoted ส่วนใหญ่ไม่ทำงานสำหรับ iOS 7/8

ใน Info.plist ให้ตั้งค่า 'ดูสถานะแถบตัวควบคุมตามสถานะ' เป็น NO

ใน AppDelegate เพิ่ม

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

ถึง

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
   ......
   ...
}    

วิธีนี้ใช้ได้กับ iOS 7/8


10
เลิกใช้แล้วใน iOS 9: - /
sudo ทำการติดตั้ง

112

สำหรับฉันไม่มีอะไรเกิดขึ้นกับการใช้ทุกสิ่งในคำตอบอื่น ๆ (และจากแหล่งข้อมูลอื่น ๆ / เอกสาร) สิ่งที่ช่วยได้คือการตั้งค่าสไตล์แถบการนำทางเป็น "สีดำ" ใน XIB สิ่งนี้เปลี่ยนข้อความเป็นสีขาวโดยไม่มีรหัสใด ๆ เลย

ป้อนคำอธิบายภาพที่นี่


3
ในอุปกรณ์ไม่มีคำตอบข้างต้นทำงานให้ฉัน แต่อันนี้ ฉันคิดว่ามันบอกทุกอย่างเกี่ยวกับระบบใหม่ที่คุณต้องตั้งค่าnavigation_barเป็น BLACK เพื่อให้มีstatus_bar text WHITE
MrTJ

2
หลังจากดิ้นรนผ่านหลายสิ่งหลายอย่างนี่คือสิ่งที่ลงเอยด้วยการทำงาน ตั้งค่าสไตล์เป็นค่าเริ่มต้น เปลี่ยนสิ่งนี้และถอดแถบสถานะอื่น ๆ ทั้งหมดออกมาและใช้งานได้
Gujamin

1
หากคุณไม่ต้องการตั้งค่าแถบนำทางทั้งหมดใน IB คุณสามารถตั้งค่าลักษณะที่ปรากฏของพร็อกซีได้ [[ลักษณะของ UINavigationBar] setBarStyle: UIBarStyleBlack];
Steve Moser

3
ใช้งานไม่ได้กับฉันใน iOS7 Storyboard ดูเหมือนว่านี่อาจเป็นผลข้างเคียงของระบบปฏิบัติการอย่างอื่นหรือไม่
Chris

ฉันต้องการยืนยันว่าคำตอบทั้งหมดข้างต้นไม่ได้ผลสำหรับฉันหรือไม่ ตามภาพข้อความแถบสถานะจะเป็นสีขาว แต่ฉันทำซ้ำอีกครั้งคำตอบข้างต้นด้วย Xcode 6.2 และ iOS 8.2 ไม่ทำงาน
Markus

98

ไม่มีสิ่งใดที่เหมาะกับฉันดังนั้นนี่เป็นวิธีแก้ปัญหาที่ทำงานได้ ...

ในInfo.plistเพิ่มแถว:

UIViewControllerBasedStatusBarAppearanceNOและการตั้งค่า

จากนั้นใน AppDelegate didFinishLaunchingWithOptionsให้เพิ่มแถวเหล่านี้:

[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];

วิธีนี้ใช้ได้ผลสำหรับฉันในขณะที่วิธีการข้างต้นไม่ได้
John Contarino

ยอดเยี่ยม แต่ UIViewControllerBasedStatusBarAppearance นี้แปลงเป็นแบบเดียวกัน: ดูลักษณะแถบสถานะตามตัวควบคุมโดยอัตโนมัติ :)
Abhishek Thapliyal

63

คุณไม่จำเป็นต้องทำรหัสใด ๆ สำหรับสิ่งนี้

คุณต้องเพิ่มปุ่ม "ดูลักษณะแถบสถานะตามตัวควบคุม" ใน info.plist ดังต่อไปนี้: ป้อนคำอธิบายรูปภาพที่นี่

& ตั้งค่าประเภทเป็น Boolean & ค่าเป็น NO จากนั้นคลิกที่การตั้งค่าโครงการจากนั้นคลิกที่แท็บทั่วไปและภายใต้ข้อมูลการปรับใช้ตั้งค่าสไตล์แถบสถานะที่ต้องการเป็น. Light ดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

แค่นั้นแหละ.


1
ฉันชอบแนวทางของคุณ! ในกรณีของฉันฉันพยายามหาวิธีทำให้แถบสถานะเป็นแบบเบาเมื่อเป็นแบบเต็มหน้าจอ (ไม่มีแถบนำทาง) จากนั้นฉันก็รู้ว่าหน้าจออื่น ๆ ทั้งหมดควรมีขนาดเบาเหมือนกัน ทางออกที่ดีคือการตั้งค่าทั้งหมด ขอบคุณ! (:
Igor de Lorenzi

หากคุณไม่จำเป็นต้องเปลี่ยนแปลงสิ่งนี้ในขณะที่แอปของคุณกำลังทำงาน นี่เป็นวิธีการที่ดีที่สุด
Michael

วิธีนี้ใช้งานได้ดี แต่จะแนะนำปัญหาแปลก ๆ บน iPad ในกรณีที่แอปพลิเคชันของคุณรองรับ deeplinks และเมื่อคุณเปิดแอปพลิเคชันผ่าน deeplink ลิงก์ย้อนกลับที่ปรากฏบนแถบสถานะจะหายไป
Chitranshu Asthana

ดีที่สุดและง่ายที่สุด
Amit Kumar

ทางออกที่ดีที่สุดสำหรับฉัน: D
Gold Chicken

48

เพียงสองขั้นตอนดังต่อไปนี้:

ขั้นตอนที่ 1:

ใต้แท็บข้อมูลของ project target , เพิ่มแถว:

UIViewControllerBasedStatusBarAppearance, ตั้งค่า NOค่าที่ตั้งไว้

ขั้นตอนที่ 2:

ในโครงการAppDelegate.m:

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{[application setStatusBarStyle:UIStatusBarStyleLightContent];}

4
ฉันชอบคำตอบนี้เพราะเป็นครั้งแรกที่ฉันใช้ "แอปพลิเคชัน" param))
MUH Mobile Inc.

สัญกรณ์ดอทและมันจะสมบูรณ์แบบ;)
ริเวร่า

43

ใช้งานได้ใน Golden Master iOS 7 และ Xcode 5 GM seed และ iOS7 SDK ที่วางจำหน่ายเมื่อวันที่ 18 กันยายน 2013 (อย่างน้อยก็ซ่อนตัวควบคุมการนำทางไว้):

  1. ตั้งค่าthe UIViewControllerBasedStatusBarAppearanceการในNO Info.plist

  2. ไม่ว่าจะในViewDidLoadวิธีการหรือที่ใดก็ตามคุณต้องการเปลี่ยนรูปแบบของแถบสถานะที่ใด: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];


1
UIViewControllerBasedStatusBarAppearance ดูเหมือนว่าค่าเริ่มต้นจะเป็น YES "แอปเริ่มต้นที่จะใช้ระบบการจัดการแถบสถานะที่ใช้มุมมองใหม่หากต้องการยกเลิกสิ่งนี้ให้เพิ่มค่า NO สำหรับคีย์ UIViewControllerBasedStatusBarAppearance ให้กับ Info.plist ของคุณ" [ bgr.com/2013/09/10/ios-7-gm-change-log-release-notes/]
Zsolt

1
Ya !! หลังจากตั้งค่า UIViewControllerBasedStatusBarAppearance เป็น NO แถบสถานะจะซ่อนในมุมมอง
CashLee 李秉骏

ควรนำไปใช้กับ viewdidload ทั้งหมดหรือไม่
Arnlee Vizcayno

คุณสามารถเพิ่มได้เพียงใน appDelegates didFinishLoading วิธี หรือในมุมมองแรกเมธอด viewDidLoad หากคุณไม่ต้องการให้เปลี่ยน
Deniss Fedotovs

1
น่าอัศจรรย์อันนี้ทำงานได้ดี การเขียนโปรแกรมที่ง่ายและดี
เฟลิเป้

32

ในกรณีที่ UIViewController ของคุณอยู่ใน UINavigationController คุณจะต้องตั้งค่า BarStyle:

-[UINavigationBar setBarStyle:UIBarStyleBlack]

คำตอบเดิมอยู่ที่นี่

https://devforums.apple.com/message/844264#844264


ไม่สิ่งนี้ทำให้สีของแถบการนำทางเหมือนกับสีข้อความของแถบสถานะ สิ่งนี้ซ่อนปัญหาไม่แก้ไขได้!
wpearse

2
ใน iOS7 แถบสถานะจะเลียนแบบ UINavigationBar หากมุมมองมี UINavigationController ดังนั้นในหลายกรณีนี่เป็นคำตอบที่ถูกต้อง
jonstaff

29

หากคุณมีตัวควบคุมการนำทางแบบฝังที่สร้างขึ้นผ่านตัวสร้างส่วนต่ออย่าลืมตั้งค่าต่อไปนี้ในคลาสที่จัดการตัวควบคุมทิศทางของคุณ:

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

นั่นควรเป็นสิ่งที่คุณต้องการ


นี่เป็นทางออกเดียวที่ทำงานได้สำหรับฉันในแอปสตอรีบอร์ดน้อยกว่าและจิบน้อยกว่า ควรเป็นประโยชน์สำหรับผู้ใช้ที่ไม่ใช่ IB ด้วย
Johnny Sparks

2
นี่คือที่สมบูรณ์แบบสำหรับฉันเมื่อฉันต้องการที่จะกำหนดรูปแบบที่แตกต่างกันในแต่ละมุมมองควบคุม
Ben

หากคุณต้องการที่จะคงไว้ "ดูแถบสถานะตามตัวควบคุม" ตั้งค่าเป็นใช่นี่คือวิธีที่จะไป ขอบคุณ!
cloudsurfin

28

ฉันใช้Xcode 6 beta 5 ในโครงการSwiftสำหรับแอป iOS 7

นี่คือสิ่งที่ฉันทำและใช้งานได้:

info.plist:

ป้อนคำอธิบายภาพที่นี่


2
ขอบคุณดูเหมือนว่าโซลูชันของคุณจะทำงานกับเวอร์ชั่นล่าสุดของ IOS7
Dekel Maman

วิธีการแก้ปัญหานี้แสดงแถบสถานะในขณะที่โหลดแอพในหน้าจอเรียกใช้
Juan Boero

แก้ไขปัญหาของฉันใน xCode 7.1 รุ่นล่าสุด. แอปเปิ้ลลืมชิ้นสำคัญสองสามชิ้นเพื่อทำให้บางสิ่งบางอย่างทำงานได้ อีกครั้ง
ไมเคิล

22

ใน AppDelegate.m เพิ่มต่อไปนี้

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

} 

และในไฟล์ Plist ให้ตั้งค่า 'ดูลักษณะแถบสถานะตามคอนโทรลเลอร์' เป็น NO


20

เพียงแค่ใน Appdelegate

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

5
คำตอบเดียวเท่านั้นที่ได้ผลจริงสำหรับฉัน
Wim Haanstra

6
แต่สำหรับเรื่องนี้เราต้องเลือกที่จะไม่ดูตัวควบคุมตามลักษณะแถบสถานะ
iamyogish

เลิกใช้ใน iOS9
Dimitris

20

มันทำงานได้ดีเหมือนเค้กชิ้นหนึ่งสำหรับฉัน

ไปที่แอพของinfo.plistคุณ

  1. ตั้งค่าView controller-based status bar appearanceเป็นNO
  2. ตั้งค่าStatus bar styleเป็นUIStatusBarStyleLightContent

จากนั้นไปที่ผู้มอบสิทธิ์แอพของคุณและวางรหัสต่อไปนี้ซึ่งคุณตั้งค่า RootViewController ของ Windows

#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,320, 20)];
    view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
    [self.window.rootViewController.view addSubview:view];
}

การเล่นชนิดหนึ่ง มันใช้งานได้สำหรับฉัน


1
ฉันคิดว่านี่เป็นคำตอบที่ถูกต้อง (ส่วนหนึ่งของนักเขียน) ... ทำไมฉันถึงต้องเพิ่มรหัสแบบคงที่ใน didfinishlaunchingwithoptions ... หากคุณต้องการสีเดียวกันสำหรับทั้งแอปนี่เป็นวิธีที่ถูกต้อง
user2387149

20
  1. ไปที่Project-> Target,

  2. จากนั้นตั้งค่าไปStatus Bar Style Lightมันทำให้แถบสถานะสีขาวจากหน้าจอเปิด การตั้งค่าโครงการ

  3. จากนั้นตั้งค่าView controller-based status bar appearanceเท่ากับในNOInfo.plist


2
ส่วนที่สองที่คุณตั้งค่าที่เกิดขึ้นจริงView controller-based status bar appearance equalที่จะNOเป็นส่วนหนึ่งที่ผมหายไป ขอบคุณ
Will

18

เปลี่ยนข้อมูล PLIST ใน Swift 3 นั้นง่ายมากเพียงแค่ 2 ขั้นตอน ไปที่ info.plist ของคุณและเปลี่ยนรหัสView controller-based status bar appearanceเป็น "ไม่" จากนั้นใน Appdelegate เพียงเพิ่มบรรทัดนี้ในวิธีการที่ไม่ได้เปิดใช้งานด้วยตัวเลือก

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        UIApplication.shared.statusBarStyle = .lightContent
        return true
    }

สิ่งนี้เลิกใช้แล้วใน iOS9 ในตอนนี้คุณควรจะลบล้างคุณสมบัตินี้ใน rootviewcontroller

การทำสิ่งนี้เลิกใช้แล้วใน iOS 9 ควรทำสิ่งนี้กับ rootviewcontroller

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
 }

1
ขอบคุณมากครับ :)
Naresh Reddy M

การทำสิ่งนี้ได้รับการคัดค้านใน iOS 9 ควรทำเช่นนี้ในการแทนที่ rootviewcontroller var ที่ต้องการStatusBarStyle: UIStatusBarStyle {return .lightContent}
James Rochabrun

17

iOS 7 อนุญาตให้ตัวควบคุมมุมมองแต่ละตัวกำหนดลักษณะที่ปรากฏของแถบสถานะดังที่อธิบายไว้ในเอกสารประกอบสำหรับนักพัฒนาของ Apple:

iOS 7 ให้มุมมองตัวควบคุมความสามารถในการปรับสไตล์ของแถบสถานะในขณะที่แอพกำลังทำงาน วิธีที่ดีที่จะเปลี่ยนลักษณะแถบสถานะแบบไดนามิกคือการดำเนินการและการเคลื่อนไหวภายในบล็อกปรับปรุงลักษณะแถบสถานะและการโทรpreferredStatusBarStylesetNeedsStatusBarAppearanceUpdate

การตั้งค่าลักษณะแถบสถานะทั่วโลกเป็นกระบวนการสองขั้นตอน

ก่อนอื่นคุณต้องบอก iOS ว่าคุณไม่ต้องการตั้งค่าลักษณะแถบสถานะแบบทีละมุมมอง

จากนั้นคุณต้องรับผิดชอบและกำหนดรูปแบบแถบสถานะใหม่ทั่วโลก

ไปที่มุมมองโดยมุมมองการควบคุมแถบสถานะปิดการใช้งานคุณจะต้องตั้งค่าคุณสมบัติในView controller-based status bar appearanceInfo.plist

เปิด Project Navigator และเลือกโครงการสำหรับแอป iOS ของคุณจากนั้นเลือกแท็บข้อมูล

.plistเลื่อนเมาส์ไปที่แถวนั้นคลิกที่เครื่องหมายบวกปรากฏว่าการเพิ่มคุณสมบัติใหม่ที่คุณ

ใส่ในเขตข้อมูลคีย์แล้วให้แน่ใจว่าข้อมูลประเภทมีการตั้งค่าView controller-based status bar appearance Booleanในที่สุดป้อนNOในฟิลด์ค่า

การตั้งค่ารูปแบบทั่วโลกสำหรับแถบสถานะเพิ่มคุณสมบัติอื่นภายใต้แท็บข้อมูลด้วยกุญแจของStatus bar styleเป็นประเภทและมูลค่าของStringOpaque black style

นี่คือโพสต์บล็อกที่มีรายละเอียดเพิ่มเติมเล็กน้อยและโค้ดตัวอย่างบางส่วน:

http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/


ขอบคุณ ปัญหาของฉันคือฉันไม่เห็นว่ามีการตั้งค่าประเภทของ "ลักษณะแถบสถานะตามตัวควบคุม" เป็นสตริง การแก้ไขไฟล์. plist "ด้วยมือ" และใส่ค่าบูลีนเพื่อล้างสิ่งต่างๆ
Chris Prince

12

ไม่จำเป็นต้องทำอะไรเพิ่มเพียงแค่เขียนโค้ดนี้ใน viewController ของคุณและรับแถบสถานะสีขาว

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}

วางสิ่งนี้ภายใต้ ViewController.m หลังจากการนำไปใช้งาน มันง่ายที่สุดและใช้งานได้ดี! ขอบคุณ Mohit!
Phil Mulkins

12

คำตอบอัพเดทสำหรับสำหรับ Xcode GM Seed:

  1. ในการInfo.plistใส่View controller-based status bar appearanceเป็นNO

  2. ในโครงการตั้ง:

    ป้อนคำอธิบายภาพที่นี่

  3. ใน ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];


นั่นเปลี่ยนแถบแท็บไม่ใช่แถบสถานะสำหรับฉัน
Keith

11

ฉันคิดว่าคำตอบทั้งหมดไม่ได้ชี้ปัญหาเพราะพวกเขาทั้งหมดทำงานในสถานการณ์เฉพาะ แต่ถ้าคุณจำเป็นต้องครอบคลุมทุกกรณีตามคะแนนร้อง:

ขึ้นอยู่กับว่าคุณต้องการสไตล์แถบแสงในสถานะไหนคุณควรคำนึงถึง 3 จุดต่อไปนี้:

1) หากคุณต้องการแถบสถานะที่หน้าจอเปิดตัวหรือในที่อื่น ๆ ซึ่งคุณไม่สามารถควบคุมได้ (ไม่ใช่ในตัวควบคุมมุมมอง แต่เป็นองค์ประกอบ / ช่วงเวลาที่ระบบควบคุมเช่นช่วงหน้าจอเรียกใช้) คุณไปที่การตั้งค่าโครงการ การตั้งค่าโครงการ

2) หากคุณมีตัวควบคุมอยู่ภายในตัวควบคุมการนำทาง คุณสามารถเปลี่ยนได้ในตัวสร้างส่วนต่อประสานดังนี้:

a) เลือกแถบนำทางของตัวควบคุมทิศทาง เลือกแถบการนำทางของตัวควบคุมการนำทางของคุณ

b) จากนั้นตั้งค่าสไตล์ของแถบนำทางเป็น "Black" เพราะนี่หมายความว่าคุณจะมี "black" -> พื้นหลังสีดำใต้แถบสถานะของคุณดังนั้นมันจะตั้งแถบสถานะเป็นสีขาว

ป้อนคำอธิบายรูปภาพที่นี่

หรือทำในรหัสดังนี้

navigationController?.navigationBar.barStyle = UIBarStyle.Black

3) ถ้าคุณมีคอนโทรลเลอร์เพียงอย่างเดียวที่ต้องมีสไตล์เป็นแถบสถานะของตัวเองและมันไม่ได้ฝังอยู่ในโครงสร้างคอนเทนเนอร์บางอย่างในฐานะ UINavigationController

กำหนดลักษณะแถบสถานะในรหัสสำหรับตัวควบคุม:

การตั้งค่าสไตล์แถบสถานะในรหัส


โปรดอธิบายกรณีของคุณและฉันจะพยายามช่วย
ฟอกซ์

1
ฉันต้องเพิ่ม StatusBarIsIntiallyHidden = NO ให้กับ plist รวมถึง ViewControllerBasedApplicationStatusBarAppearnce = NO ให้กับ plist จากนั้นใช้งานได้ส่วนหนึ่ง
Michael

คุณมี splashscreen ซึ่งมี "รูปภาพ" เหมือนกับตัวควบคุมมุมมองการโหลดครั้งแรกหรือไม่? และในส่วน "ข้อมูล" ของเป้าหมายของคุณคุณสามารถลองตั้งค่า "ซ่อนแถบสถานะ" เป็นเท็จและหลีกเลี่ยงการจัดการกับ. plist ของคุณ แฟล็ก "StatusBarIsIntiallyHidden"
Fawkes

ฉันไม่. มันกำลังใช้ค่าเริ่มต้น xib ที่สร้างขึ้น
Michael

จริง ๆ แล้วฉันพบปัญหานี้เมื่อสร้างโครงการใหม่ใน xCode 7.1 ซึ่งเป็นสาเหตุที่ฉันคิดว่ามันแปลกมาก
Michael

10

เพียงแค่โทร

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

ใน

-(BOOL)application:(UIApplication *)application 
           didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}

วิธีการของฉันใช้AppDelegateงานได้ดีสำหรับฉันใน iOS7


ว้าว, อึมากที่นี่ แต่คำตอบนี้ใช้ได้สำหรับฉัน ฉันใช้ Xcode 6 และ iOS 8 SDK
Ethan Parker

1
ยอดเยี่ยมใช้ได้กับฉันใน iOS 9 ด้วยView controller-based status bar appearance = NO
dstudeba

9

เอกสารนี้มีอยู่ในคู่มือการเปลี่ยน iOS 7 UIซึ่งคุณต้องมี ID นักพัฒนาของ Apple เพื่อเข้าถึงโดยตรง ข้อความที่ตัดตอนมาที่เกี่ยวข้อง:

เนื่องจากแถบสถานะโปร่งใสมุมมองด้านหลังจะแสดงผ่าน [... ] ใช้UIStatusBarStyleค่าคงที่เพื่อระบุว่าเนื้อหาในแถบสถานะควรมืดหรือสว่าง:

UIStatusBarStyleDefaultแสดงเนื้อหามืด [ ... ]

UIStatusBarStyleLightContentแสดงเนื้อหาเบา ใช้เมื่อเนื้อหามืดอยู่ด้านหลังแถบสถานะ

อาจเป็นไปได้ที่น่าสนใจ:

ใน iOS 7 คุณสามารถควบคุมสไตล์ของแถบสถานะจากคอนโทรลเลอร์ vew แต่ละตัวและเปลี่ยนในขณะที่แอพทำงาน การเลือกในพฤติกรรมนี้เพิ่มUIViewControllerBasedStatusBarAppearanceที่สำคัญในการของแอปไฟล์และให้มันคุ้มค่าInfo.plistYES

ฉันขอแนะนำให้ดูเอกสารอย่างแน่นอนซึ่งคุณสามารถเข้าถึงได้ด้วย ID นักพัฒนา Apple ของคุณ


3
ฉันได้ลองแล้ว [แอปพลิเคชัน setStatusBarStyle: UIStatusBarStyleLightContent]; แต่จริงๆแล้วไม่มีอะไรเปลี่ยนแปลงสีข้อความยังคงเป็นสีดำ
Oleksandr Veremchuk

ฉันชอบที่จะได้รับความช่วยเหลือเพิ่มเติม แต่อย่างที่ฉันบอกว่าฉันไม่คุ้นเคยกับกระบวนการพัฒนา iOS เพื่อทราบว่าจะแนะนำอะไร ขออภัย!
Aaron Miller

1) ตั้งค่า UIViewControllerBasedStatusBarAppearance เป็น YES ใน plist 2) ใน viewDidLoad ทำ [self setNeedsStatusBarAppearanceUpdate]; 3) เพิ่มวิธีการต่อไปนี้ :-( UIStatusBarStyle) PreferredStatusBarStyle {return UIStatusBarStyleLightContent; }
Peter B. Kramer

9

นี่คือหลักเกณฑ์ / คำแนะนำของ Appleเกี่ยวกับการเปลี่ยนแถบสถานะ อนุญาตเฉพาะ Dark & ​​light (ในขณะที่ & black) ในแถบสถานะ

นี่คือ - วิธีการเปลี่ยนรูปแบบแถบสถานะ:

หากคุณต้องการตั้งค่าสไตล์แถบสถานะระดับแอปพลิเคชันจากนั้นตั้งค่าUIViewControllerBasedStatusBarAppearanceเป็นNOในไฟล์ `.plist '

หากคุณต้องการตั้งค่าสไตล์แถบสถานะที่ระดับตัวควบคุมมุมมองจากนั้นทำตามขั้นตอนเหล่านี้:

  1. การตั้งค่าUIViewControllerBasedStatusBarAppearanceไปYESใน.plistแฟ้มถ้าคุณจำเป็นต้องตั้งค่าสถานะสไตล์บาร์ในระดับ UIViewController เท่านั้น
  2. ในฟังก์ชั่นเพิ่ม viewDidLoad - setNeedsStatusBarAppearanceUpdate

  3. แทนที่ที่ต้องการStatusBarStyleในตัวควบคุมมุมมองของคุณ

-

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

ตั้งค่าเป็น. plist ตามระดับการตั้งค่าสไตล์แถบสถานะ ป้อนคำอธิบายรูปภาพที่นี่


ต่อไปนี้เป็นเคล็ดลับการแฮ็กที่จะเปลี่ยน / ตั้งค่าสีพื้นหลังสำหรับแถบสถานะในระหว่างการเรียกใช้แอปพลิเคชันหรือระหว่าง 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
    }

}



นี่คือผลลัพธ์:

ป้อนคำอธิบายรูปภาพที่นี่


8

ฉันทำบางสิ่งที่แตกต่างและทำงานได้สำหรับฉัน

เมื่อไม่มีการเปลี่ยนแปลงรหัสฉันได้กำหนดค่าไฟล์. plist ของฉันดังนี้:

  • ดูลักษณะแถบสถานะตามคอนโทรลเลอร์> NO
  • สไตล์แถบสถานะ> UIStatusBarStyleLightContent (สตริงแบบง่าย)

ฉันหวังว่ามันจะช่วย

แก้ไข

สำหรับตัวควบคุมมุมมองแต่ละตัวฉันเปลี่ยนคุณสมบัติ "ตัวชี้วัดจำลอง" ในกระดานเรื่องราวจาก "สรุป" เป็น "เนื้อหาเบา"


8

หากคุณต้องการผลลัพธ์เดียวกันกับ Swift คุณสามารถใช้รหัสนี้ในไฟล์ AppDelegate.swift ของคุณ:

UINavigationBar.appearance().barStyle = .BlackTranslucent

และข้อความในแถบสถานะของคุณจะเป็นสีขาว :-)!


8

หากคุณยังต้องการใช้View controller-based status bar appearanceใน info.plist ตั้งค่าเป็น YES ซึ่งหมายความว่าคุณสามารถเปลี่ยนแถบสถานะสำหรับแต่ละมุมมองคอนโทรลเลอร์ได้ให้ใช้ข้อความต่อไปนี้สำหรับข้อความสีขาวในแถบสถานะใน ViewDidLoad:

[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];

แถบนำทาง! = แถบสถานะ
Michael Peterson

... คุณลองมัน! (และใช่สำหรับแถบสถานะ)
eirik

7

ใน Plist เพิ่มสิ่งนี้:

  • สไตล์แถบสถานะ: UIStatusBarStyleLightContent
  • ดูลักษณะแถบสถานะตามคอนโทรลเลอร์: NO

7

ใน info.plist ตั้งค่าฟิลด์ NO ดูลักษณะแถบสถานะตามคอนโทรลเลอร์และตั้งแสงสไตล์ของแถบสถานะในเป้าหมาย> การตั้งค่าทั่วไป


2
ผู้ชนะเลิศรางวัลไก่ดินเนอร์
tommybananas

7

ฉันจะให้คำตอบที่สมบูรณ์สำหรับคำถามของคุณ การเปลี่ยนสีข้อความของแถบสถานะนั้นง่ายมาก แต่มันสับสนเล็กน้อยใน iOS 7 โดยเฉพาะสำหรับมือใหม่

หากคุณพยายามเปลี่ยนสีจากสีดำเป็นสีขาวใน Storyboard โดยเลือกตัวควบคุมมุมมองและไปที่ตัวจำลองแบบทางด้านขวามันจะไม่ทำงานและฉันไม่รู้ว่าทำไม มันควรจะทำงานโดยการเปลี่ยนเช่นนี้ แต่วิธีใด

ประการที่สองคุณจะไม่พบคุณสมบัติ UIViewControllerBasedStatusBarAppearance ในการวางแผนของคุณ แต่โดยค่าเริ่มต้นจะไม่มี คุณต้องเพิ่มมันด้วยตัวเองโดยคลิกที่ปุ่ม + จากนั้นตั้งเป็น NO

สีข้อความของแถบสถานะ ios 7

สุดท้ายคุณต้องไปที่ไฟล์ AppDelegate.m ของคุณและเพิ่มสิ่งต่อไปนี้ในวิธีการ didFinishLaunchingWithOptions ให้เพิ่มบรรทัดต่อไปนี้:

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

สิ่งนี้จะเปลี่ยนสีเป็นสีขาวสำหรับตัวควบคุมมุมมองทั้งหมดของคุณ หวังว่านี่จะช่วยได้!


วิธีนี้เลิกใช้แล้วใน iOS 9
Trung Bui
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.