Thanh trạng thái iOS 7 trở lại kiểu mặc định của iOS 6 trong ứng dụng iPhone?


292

Trong iOS 7, UIStatusBar đã được thiết kế theo cách nó hợp nhất với chế độ xem như thế này:

GUI được thiết kế bởi Tina Tavčar (GUI được thiết kế bởi Tina Tavčar )

  • Thật tuyệt, nhưng nó sẽ phần nào làm rối tầm nhìn của bạn khi bạn có thứ gì đó ở phần trên cùng của chế độ xem và nó trở nên chồng chéo với thanh trạng thái.

  • Có một giải pháp đơn giản (chẳng hạn như đặt thuộc tính trong info.plist) có thể thay đổi cách thức hoạt động [không chồng lấp] trở lại như thế nào trong iOS6 không?

  • Tôi biết một giải pháp đơn giản hơn là có self.view.center.x+ 20 điểm cho mỗi bộ điều khiển chế độ xem đơn lẻ, nhưng việc thay đổi chúng sẽ làm tăng các kích thước khác (có một sự khác biệt self.view.center.xcó thể gây ra sự khác biệt cho các tùy chỉnh, v.v.) và đột nhiên nó biến thành một công việc tẻ nhạt tốt nhất nên tránh

  • Tôi sẽ thực sự vui mừng nếu ai đó có thể cung cấp cho tôi một giải pháp một lớp cho việc này.

PS Tôi biết tôi có thể ẩn thanh trạng thái bằng cách làm những việc như có

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

Trong didFinishLaunchingWithOptionsphương pháp, nhưng đó là một cách giải quyết, một lối tắt tránh vấn đề, vì vậy tôi không coi đó là một giải pháp thực sự.


6
Đáng buồn là các thanh trạng thái màu đen không được dùng nữa trong ios 7
i_duhh_bomb

Tôi sẽ đồng ý với @GangstaGraham. Những màu đó thật đẹp ! Để trả lời câu hỏi của bạn, tôi sợ bạn không thể. Lý do thanh trạng thái được thiết kế như vậy bây giờ là vì độ trong mờ là thứ iOS mới và nó được thiết kế để tạo "chiều sâu" cho ứng dụng bằng cách nói nó nằm trên một cái gì đó, vì vậy có một cái gì đó bên dưới.
Cole Johnson

Bạn đã thử đặt ưu tiênStatusBarStyle thành UIStatusBarDefault chưa? Kiểm tra tài liệu UIViewControll trên iOS 7
theaob

1
UIStatusBarDefaultcho thanh trạng thái chỉ làm cho nội dung của nó màu đen. Nó sẽ không làm cho nó hoạt động trở lại như thế nào trong iOS6.
奇 - Archy Will He

2
Bất kỳ may mắn với điều này? Tôi yêu iOS7 nhưng điều này đang khiến tôi phát điên!
Mihai Fratu

Câu trả lời:


449

Đây là bài đăng chéo từ một bài đăng trên blog tôi đã viết , nhưng đây là toàn bộ danh sách trên các thanh trạng thái, thanh điều hướng và bộ điều khiển xem container trên iOS 7:

  1. Không có cách nào để giữ nguyên bố cục thanh trạng thái kiểu iOS 6. Thanh trạng thái sẽ luôn chồng lấp ứng dụng của bạn trên iOS 7

  2. Đừng nhầm lẫn sự xuất hiện của thanh trạng thái với bố cục thanh trạng thái. Sự xuất hiện (ánh sáng hoặc mặc định) không ảnh hưởng đến cách bố trí thanh trạng thái (khung / chiều cao / chồng lấp). Điều quan trọng cần lưu ý là thanh trạng thái hệ thống không còn có bất kỳ màu nền nào. Khi API đề cập đến UIStatusBarStyleLightContent, chúng có nghĩa là văn bản màu trắng trên nền rõ ràng. UIStatusBarStyleDefault là văn bản màu đen trên nền rõ ràng.

  3. Giao diện thanh trạng thái được điều khiển dọc theo một trong hai đường dẫn cơ sở loại trừ lẫn nhau: bạn có thể đặt chúng theo cách lập trình theo cách truyền thống hoặc UIKit sẽ cập nhật giao diện cho bạn dựa trên một số thuộc tính mới của UIViewControll. Tùy chọn thứ hai được bật theo mặc định. Kiểm tra giá trị nguyên bản của ứng dụng của bạn để xem Thanh trạng thái dựa trên View View của Trình điều khiển Nhìn để xem cái nào bạn đang sử dụng. Nếu bạn đặt giá trị này thành CÓ, mọi bộ điều khiển chế độ xem cấp cao nhất trong ứng dụng của bạn (không phải là bộ điều khiển chế độ xem bộ chứa UIKit tiêu chuẩn) cần ghi đè lên PreStatusBarStyle, trả về kiểu mặc định hoặc kiểu sáng. Nếu bạn chỉnh sửa giá trị plist thành NO, thì bạn có thể quản lý giao diện thanh trạng thái bằng các phương thức UIApplication quen thuộc.

  4. UINavestionControll sẽ thay đổi chiều cao của UINavestionBar của nó thành 44 điểm hoặc 64 điểm, tùy thuộc vào một tập hợp các ràng buộc khá lạ và không có giấy tờ. Nếu UINavestionControll phát hiện ra rằng đỉnh của khung nhìn của nó nằm liền kề với đỉnh của UIWindow, thì nó sẽ vẽ thanh điều hướng của nó với chiều cao 64 điểm. Nếu đỉnh của khung nhìn không liền kề với đỉnh của UIWindow (ngay cả khi chỉ tắt một điểm), thì nó sẽ vẽ thanh điều hướng của nó theo cách truyền thống của Điên với chiều cao 44 điểm. Logic này được thực hiện bởi UINavestionControll ngay cả khi có một vài phần tử bên trong phân cấp trình điều khiển xem của ứng dụng của bạn. Không có cách nào để ngăn chặn hành vi này.

  5. Nếu bạn cung cấp hình ảnh nền của thanh điều hướng tùy chỉnh chỉ cao 44 điểm (88 pixel) và giới hạn chế độ xem của UINavestionContaptor khớp với giới hạn của UIWindow (như được thảo luận trong # 4), UINavlationControll sẽ vẽ hình ảnh của bạn trong khung (0,20,320 , 44), để lại 20 điểm không gian màu đen mờ phía trên hình ảnh tùy chỉnh của bạn. Điều này có thể khiến bạn nhầm lẫn rằng bạn là một nhà phát triển thông minh đã bỏ qua quy tắc số 1, nhưng bạn đã nhầm. Thanh điều hướng vẫn cao 64 điểm. Việc nhúng một UINavestionContaptor trong hệ thống phân cấp dạng xem dạng trượt để hiển thị rõ ràng.

  6. Cảnh giác với thuộc tính edgeForExtendsLayout có tên khó hiểu của UIViewControll. Điều chỉnh các cạnhForExtendsLayout không làm gì trong hầu hết các trường hợp. Cách duy nhất UIKit sử dụng thuộc tính này là nếu bạn thêm bộ điều khiển chế độ xem vào UINavestionControll, thì UINavestionControll sử dụng edgeForExtendsLayout để xác định xem bộ điều khiển chế độ xem con của nó có hiển thị bên dưới khu vực thanh điều hướng / trạng thái hay không. Việc thiết lập edgeForExtendsLayout trên chính UINavestionControll không có gì thay đổi cho dù UINavestionControll có khu vực thanh điều hướng cao 44 hay 64 điểm hay không. Xem # 4 cho logic đó. Logic bố cục tương tự áp dụng cho cuối chế độ xem của bạn khi sử dụng thanh công cụ hoặc UITabBarCont kiểm soát.

  7. Nếu tất cả những gì bạn đang cố gắng là ngăn bộ điều khiển xem con tùy chỉnh của bạn đặt dưới thanh điều hướng khi bên trong UINavestionContaptor, sau đó đặt edgeForExtendsLayout thành UIRectEdgeNone (hoặc ít nhất là mặt nạ loại trừ UIRectEdgeTop). Đặt giá trị này càng sớm càng tốt trong vòng đời của bộ điều khiển xem của bạn.

  8. UINavestionContaptor và UITabBarContoder cũng sẽ cố gắng đệm nội dung Các tập hợp các khung nhìn bảng và các khung nhìn bộ sưu tập trong hệ thống phân cấp xem xét của nó. Nó thực hiện điều này theo cách tương tự như logic thanh trạng thái từ # 4. Có một cách lập trình để ngăn chặn điều này, bằng cách đặt tự độngAdjustScrollViewInsets thành NO cho chế độ xem bảng và chế độ xem bộ sưu tập của bạn (mặc định là CÓ). Điều này đặt ra một số vấn đề nghiêm trọng cho Whisper và Riposte, vì chúng tôi sử dụng các điều chỉnh contentInset để kiểm soát bố cục của chế độ xem bảng để đáp ứng với chuyển động của thanh công cụ và bàn phím.

  9. Để nhắc lại: không có cách nào để quay lại logic bố cục thanh trạng thái kiểu iOS 6. Để ước tính điều này, bạn phải di chuyển tất cả các bộ điều khiển chế độ xem của ứng dụng của bạn sang chế độ xem container được bù 20 điểm từ trên cùng của màn hình, để lại chế độ xem đen cố ý phía sau thanh trạng thái để mô phỏng giao diện cũ. Đây là phương pháp mà chúng tôi đã sử dụng trong Riposte và Whisper.

  10. Apple đang nỗ lực rất nhiều để đảm bảo rằng bạn không cố gắng làm # 9. Họ muốn chúng tôi thiết kế lại tất cả các ứng dụng của chúng tôi để làm cơ sở cho thanh trạng thái. Có nhiều tranh luận chung, tuy nhiên, vì cả lý do người dùng và lý do kỹ thuật, tại sao điều này không phải lúc nào cũng là một ý tưởng tốt. Bạn nên làm những gì tốt nhất cho người dùng của bạn và không chỉ đơn giản là làm theo sự hay thay đổi của nền tảng.


35
Chỉ muốn thêm rằng bạn có thể thêm một ràng buộc cho bất cứ thứ gì ở đầu chế độ xem của bạn để được gắn vào hướng dẫn bố cục trên cùng - điều này sẽ để lại một khoảng trống phía sau thanh trạng thái (bạn có thể điền bất kỳ màu nào bạn muốn) nhưng cũng sẽ cho phép chế độ xem tự động điều chỉnh đến vị trí chính xác trong iOS 6. Bằng cách đó, bạn không phải điều chỉnh thủ công vị trí quan điểm của mình trong mã.
BreadicalMD

4
Đó là một giải pháp tuyệt vời. Bạn đã bộc lộ sự thiếu hiểu biết của mình trên AutoLayout. Tốt hơn nên nhận về điều đó.
jaredsinclair

1
Nếu bạn đặt không gian trên cùng của đối tượng bên dưới cạnh của hướng dẫn bố cục trên cùng, bạn có thể sử dụng điều khiển ràng buộc để thêm ràng buộc khoảng cách dọc cho hàng xóm gần nhất, giờ đây sẽ là hướng dẫn bố cục trên cùng. Ngoài ra, bạn có thể sử dụng ctrl + nhấp từ đối tượng của mình vào hướng dẫn bố cục trên cùng để thêm ràng buộc khoảng cách dọc.
BreadicalMD

2
@BreadicalMD Một phần tôi không hiểu là -topLayoutGuide không khả dụng trên iOS 6, vì vậy điều đó có nghĩa là bạn cần sử dụng các ràng buộc Bố cục tự động khác nhau trên iOS 7 và 6?
Jeremy

1
Câu trả lời tuyệt vời ... Nhưng tôi có một nghi ngờ 1) UINavestionControll thay đổi phần chiều cao. Vui lòng giải thích thêm một chút. cảm ơn
user1010819

122

Cập nhật vào ngày 19 tháng 9 năm 2013:

sửa lỗi mở rộng quy mô bằng cách thêm self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);

sửa lỗi chính tả trong NSNotificationCentercâu


Cập nhật vào ngày 12 tháng 9 năm 2013:

sửa UIViewControllerBasedStatusBarAppearancethànhNO

đã thêm một giải pháp cho các ứng dụng có xoay màn hình

đã thêm một cách tiếp cận để thay đổi màu nền của thanh trạng thái.


Rõ ràng, không có cách nào để hoàn nguyên thanh trạng thái iOS7 trở lại cách nó hoạt động trong iOS6.

Tuy nhiên, chúng tôi luôn có thể viết một số mã và biến thanh trạng thái thành giống như iOS6 và đây là cách ngắn nhất tôi có thể đưa ra:

  1. Đặt UIViewControllerBasedStatusBarAppearanceđể NOinfo.plist(Để chọn không tham gia có quan điểm điều khiển điều chỉnh tình trạng phong cách thanh để chúng tôi có thể thiết lập các phong cách thanh trạng thái bằng cách sử dụng phương pháp UIApplicationstatusBarStyle.)

  2. Trong AppDelegate application:didFinishLaunchingWithOptions, hãy gọi

    if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
        [application setStatusBarStyle:UIStatusBarStyleLightContent];
        self.window.clipsToBounds =YES;
        self.window.frame =  CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
    
        //Added on 19th Sep 2013
        self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
    }
    return YES;
    


để mà:

  1. Kiểm tra xem đó có phải là iOS 7 không.

  2. Đặt nội dung của thanh trạng thái thành màu trắng, trái ngược với UIStatusBarStyleDefault.

  3. Tránh các cuộc phỏng vấn có khung hình vượt ra ngoài giới hạn hiển thị để hiển thị (đối với các chế độ xem hoạt hình vào chế độ xem chính từ trên xuống).

  4. Tạo ảo giác rằng thanh trạng thái chiếm không gian như trong iOS 6 bằng cách thay đổi và thay đổi kích thước khung cửa sổ của ứng dụng.


Đối với các ứng dụng có màn hình xoay,

sử dụng NSNotificationCenter để phát hiện các thay đổi hướng bằng cách thêm

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];

trong if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)và tạo một phương thức mới trong AppDelegate:

- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification
{
    int a = [[notification.userInfo objectForKey: UIApplicationStatusBarOrientationUserInfoKey] intValue];
    int w = [[UIScreen mainScreen] bounds].size.width;
    int h = [[UIScreen mainScreen] bounds].size.height;
    switch(a){
        case 4:
            self.window.frame =  CGRectMake(0,20,w,h);
            break;
        case 3:
            self.window.frame =  CGRectMake(-20,0,w-20,h+20);
            break;
        case 2:
            self.window.frame =  CGRectMake(0,-20,w,h);
            break;
        case 1:
           self.window.frame =  CGRectMake(20,0,w-20,h+20);
    }
}

Vì vậy, khi thay đổi hướng, nó sẽ kích hoạt câu lệnh chuyển đổi để phát hiện hướng màn hình của ứng dụng (Chân dung, Lộn ngược, Cảnh trái hoặc Cảnh phải) và thay đổi khung cửa sổ của ứng dụng để tạo ảo giác trên thanh trạng thái iOS 6.


Để thay đổi màu nền của thanh trạng thái của bạn:

Thêm vào

 @property (retain, nonatomic) UIWindow *background;

trong AppDelegate.hđể thực hiệnbackground một thuộc tính trong lớp của bạn và ngăn ARC giải phóng nó. (Bạn không phải làm điều đó nếu bạn không sử dụng ARC.)

Sau đó, bạn chỉ cần tạo UIWindow trong if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1):

background = [[UIWindow alloc] initWithFrame: CGRectMake(0, 0, self.window.frame.size.width, 20)];
background.backgroundColor =[UIColor redColor];
[background setHidden:NO];

Đừng quên @synthesize background;sau @implementation AppDelegate!


3
Điều này phá vỡ trên vòng quay. chỉ cần ngẩng cao đầu
Jesse Naugher

2
@JesseNaugher Tôi khuyên bạn nên sửa đổi ràng buộc khoảng cách dọc từ 0 đến 20 theo chương trình. Nó sẽ làm việc trên vòng quay.
chuyên gia

2
Bất kỳ ý tưởng nào về cách chúng ta có thể tránh rằng thanh điều hướng mở rộng thêm 20 pixel? Giải pháp này phù hợp với tôi nhưng thanh điều hướng của tôi quá cao 20 pixel.
simonbs

4
@ArchyHolt: Giải pháp đơn giản của bạn hoạt động với tôi trừ khi tôi trình bày một bộ điều khiển xem chế độ. Khi bộ điều khiển chế độ xem phương thức bị loại bỏ, chế độ xem còn lại bây giờ nằm ​​dưới thanh trạng thái. Tôi đã tái tạo điều này trong một dự án mẫu mới để đảm bảo không có gì khác xảy ra. Tôi nghĩ có lẽ giải pháp nâng cao hơn của bạn có thể hữu ích ở đây nhưng không chắc thông báo nào sẽ được sử dụng. Có ý kiến ​​gì không?
markdorison

4
Khung nhìn đặt lại sau khi loại bỏ bộ điều khiển chế độ xem. :(
KarenAnne

41

CẬP NHẬT (GIẢI PHÁP MỚI)

Bản cập nhật này là giải pháp tốt nhất cho sự cố thanh điều hướng iOS 7. Bạn có thể đặt ví dụ về màu của thanh điều hướng: FakeNavBar.backgroundColor = [UIColor redColor];

Lưu ý: Nếu bạn sử dụng Bộ điều khiển Điều hướng mặc định, vui lòng sử dụng giải pháp cũ.

AppDelegate.m

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

    if(NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0)
    {
        UIView *FakeNavBar = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
        FakeNavBar.backgroundColor = [UIColor whiteColor];

        float navBarHeight = 20.0;
        for (UIView *subView in self.window.subviews) {

            if ([subView isKindOfClass:[UIScrollView class]]) {
                subView.frame = CGRectMake(subView.frame.origin.x, subView.frame.origin.y + navBarHeight, subView.frame.size.width, subView.frame.size.height - navBarHeight);
            } else {
                subView.frame = CGRectMake(subView.frame.origin.x, subView.frame.origin.y + navBarHeight, subView.frame.size.width, subView.frame.size.height);
            }
        }
        [self.window addSubview:FakeNavBar];
    }

    return YES;

}

GIẢI PHÁP OLD - NẾU bạn sử dụng mã trước đó, vui lòng bỏ qua Mã và hình ảnh sau

Đây là phiên bản cũ của giải pháp thanh điều hướng iOS 7.

Tôi đã giải quyết vấn đề với đoạn mã sau. Điều này là để thêm một thanh trạng thái. didFinishLaunchingWithOptions

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
    UIView *addStatusBar = [[UIView alloc] init];
    addStatusBar.frame = CGRectMake(0, 0, 320, 20);
    addStatusBar.backgroundColor = [UIColor colorWithRed:0.973 green:0.973 blue:0.973 alpha:1]; //change this to match your navigation bar
    [self.window.rootViewController.view addSubview:addStatusBar];
}

Và đối với Interface Builder, đây là khi bạn mở bằng iOS 6; nó đang bắt đầu từ 0 pixel.

Lưu ý: Deltas iOS 6/7 chỉ xuất hiện nếu bạn bỏ chọn "Sử dụng Tự động xóa" cho Trình điều khiển xem trong "Trình kiểm tra tệp" (biểu tượng ngoài cùng bên trái) trong ngăn chi tiết.

Nhập mô tả hình ảnh ở đây


6
Bạn đã thực hiện ngày của tôi. Hãy +1 để được giúp đỡ!
Niru Mukund Shah

5
Xin lưu ý: Deltas iOS 6/7 chỉ xuất hiện nếu bạn bỏ chọn "Sử dụng Tự động xóa" cho Trình điều khiển xem trong "Trình kiểm tra tệp" (biểu tượng ngoài cùng bên trái) trong ngăn chi tiết.
Matt

1
Cảm ơn rất nhiều! Bạn đã cứu tôi rất nhiều rắc rối!
neowinston

2
Ai nói bố cục thanh trạng thái kiểu iOS 6 không thể được duy trì, Bạn có thể thực hiện việc này bằng cách @ TacettinÖzbölük ... cảm ơn bạn đời vì giải pháp awsum này.
Vizllx

1
tốt đẹp Ngoài ra, chỉ cần lưu ý táo thích điều này ngay bây giờ: if (NSFoundationVersionNumber> = NSFoundationVersionNumber_iOS_6_1) {}
Joel Balmer

26

GIẢI PHÁP :

Đặt nó trong trình điều khiển khung nhìn của bạn hoặc trong trình điều khiển rootview bằng cách ghi đè phương thức:

-(BOOL) prefersStatusBarHidden
    {
        return YES;
    }

Một giải pháp không tồi. Hoàn toàn loại bỏ thanh. Có thể không lý tưởng cho UX mọi lúc nhưng hoàn toàn khả thi.
Farhan Hafeez

Đơn giản là tuyệt vời. Làm việc cho tôi hoàn hảo.
madLokesh

Kịch bản: Khi tôi chuyển trở lại UIVIew của mình sau khi phát toàn màn hình video, một thanh màu đen xuất hiện ở phía dưới chỉ là kích thước của thanh trạng thái, mặc dù vậy, tôi đã sử dụng một thanh trạng thái. Tôi đã loại bỏ thanh trạng thái hoàn toàn và bây giờ vấn đề đã được khắc phục.
madLokesh

Tôi chỉ thành công khi sử dụng phương pháp này
user2277872

17

Dưới đây là một cách tiếp cận khác cho các dự án sử dụng rộng rãi Storyboard:

MỤC TIÊU:

Mục tiêu của phương pháp này là tạo lại kiểu thanh trạng thái tương tự trong iOS7 giống như trong iOS6 (xem tiêu đề câu hỏi "Thanh trạng thái iOS 7 trở lại kiểu iOS 6?").

TÓM LƯỢC:

Để đạt được điều này, chúng tôi sử dụng Storyboard càng nhiều càng tốt bằng cách dịch chuyển các yếu tố UI bị chồng chéo bởi thanh trạng thái (bên dưới iOS 7) xuống dưới, trong khi sử dụng deltas để hoàn nguyên thay đổi bố cục xuống cho iOS 6.1 trở về trước. Không gian thêm kết quả trong iOS 7 sau đó bị chiếm bởi một UIView với nềnColor được đặt thành màu mà chúng ta chọn. Cái sau có thể được tạo bằng mã hoặc sử dụng Storyboard (xem ALTERNATIVES bên dưới)

ĐÁNH GIÁ:

Để có được kết quả mong muốn khi làm theo các bước dưới đây, giả định rằng nó View controller-based status bar appearanceđược đặt thành KHÔNG và của bạnStatus bar style được đặt thành "Kiểu đen trong suốt (alpha 0,5)" hoặc "Kiểu đen mờ". Cả hai cài đặt có thể được tìm thấy / hoặc thêm vào dưới "Thông tin" trong cài đặt dự án của bạn.

CÁC BƯỚC:

  • Thêm một khung nhìn vào UIWindow để phục vụ làm nền thanh trạng thái của bạn. Để đạt được điều này, hãy thêm những điều sau vào AppDelegate của bạn application: didFinishLaunchingWithOptions:saumakeKeyAndVisible

    if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
        UIView *statusBarBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, yourAppsUIWindow.frame.size.width, 20)];
        statusBarBackgroundView.backgroundColor = [UIColor blackColor];
        [yourAppsUIWindow addSubview:statusBarBackgroundView];
    }
    
  • Vì bạn đã lập trình thêm nền cho CHỈ iOS 7, bạn sẽ phải điều chỉnh bố cục của các thành phần UI bị chồng chéo bởi thanh trạng thái tương ứng trong khi duy trì bố cục của chúng cho iOS6. Để đạt được điều này, hãy làm như sau:

    • Đảm bảo rằng Use Autolayout không được chọn cho Storyboard của bạn (điều này là do nếu không thì "iOS 6/7 Deltas" không được hiển thị trong Trình kiểm tra kích thước). Để làm điều này:
      • chọn tập tin Storyboard của bạn
      • hiển thị tiện ích
      • chọn "Hiển thị trình kiểm tra tệp"
      • Trong phần "Tài liệu Trình tạo giao diện" bỏ chọn "Sử dụng Tự động xóa"
    • Tùy chọn, để giúp bạn theo dõi các thay đổi bố cục cho cả iOS 7 VÀ 6 khi bạn áp dụng chúng, hãy chọn "Trình chỉnh sửa trợ lý", chọn "Xem trước" và "iOS 6.1 trở về trước": nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây
    • Bây giờ, chọn phần tử UI bạn muốn điều chỉnh để nó không bị chồng chéo bởi thanh trạng thái nữa
    • Chọn "Hiển thị Trình kiểm tra kích thước" trong cột Tiện ích
    • Định vị lại thành phần UI của bạn dọc theo trục Y với cùng số lượng với chiều cao bg của thanh trạng thái: nhập mô tả hình ảnh ở đây
    • Và thay đổi giá trị Deltas iOS6 / 7 cho Y bằng cùng số lượng NEGECT với chiều cao bg của thanh trạng thái (Lưu ý thay đổi trong bản xem trước iOS 6 nếu bạn đang sử dụng nó): nhập mô tả hình ảnh ở đây

THAY ĐỔI:

Để thêm ít mã hơn trong các dự án nặng về bảng phân cảnh và để tự động nền nền thanh trạng thái, thay vì lập trình thêm nền cho thanh trạng thái của bạn, bạn có thể thêm chế độ xem màu vào mỗi trình điều khiển chế độ xem nằm ở trên cùng của chế độ xem chính của trình điều khiển chế độ xem. Sau đó, bạn sẽ thay đổi độ cao delta của chế độ xem mới này thành cùng mức âm với chiều cao của chế độ xem của bạn (để làm cho nó biến mất trong iOS 6).

Nhược điểm của giải pháp thay thế này (mặc dù có thể không đáng kể khi xem xét khả năng tương thích tự động) là thực tế rằng chế độ xem thêm này không hiển thị ngay lập tức nếu bạn đang xem Storyboard cho iOS 6. Bạn sẽ chỉ biết rằng nó ở đó nếu bạn nhìn vào " Đề cương tài liệu "của Storyboard.


12

Nếu bạn không muốn bộ điều khiển xem của mình bị chồng chéo bởi thanh trạng thái (và thanh điều hướng), hãy bỏ chọn hộp "Mở rộng Edges Under Top Bars" trong Trình tạo giao diện trong Xcode 5.

Bỏ chọn các phần mở rộng bên dưới thanh trên cùng


7
Điều này chỉ có thể nếu bạn sử dụng bảng phân cảnh
Cur

3
Nó chỉ hoạt động với các vcs container như bộ điều khiển điều hướng hoặc bộ điều khiển thanh tab
Andrea

2
edgeForExtendsLayout chỉ được sử dụng bởi các bộ điều khiển xem container (như UINavestionControll) để xác định xem các khung nhìn của con cái có bị chồng chéo bởi chrome của cha mẹ hay không. Đặt thuộc tính này trên bộ điều khiển xem gốc cho UIWindow không làm gì cả. Xem câu trả lời của tôi ở trên: stackoverflow.com/questions/18294872/ từ
jaredsinclair

Làm thế nào để bạn làm điều đó cho một UITabBarContoder @Andrea? Cảm ơn.
KarenAnne

@KarenAnne Phụ thuộc nếu bạn làm theo chương trình hoặc với bảng phân cảnh. Về mặt lập trình, bạn chỉ cần đặt thuộc tính edgeForExtent thành những gì bạn thích trong trình điều khiển chế độ xem mà bạn đang hiển thị bên trong UITabBarViewControll, nhưng để không gặp sự cố của thanh trạng thái, bạn phải tải một bộ điều khiển uinavlation bên trong UITabbarControll. Kiểm tra tại đây. developer.apple.com/l
Library

11

Apple đã phát hành Q & A QA1797 kỹ thuật: Ngăn thanh trạng thái che mất quan điểm của bạn . Nó hoạt động tốt cho các phiên bản iOS 6 và iOS 7.


5
Apple đang giả định rằng tất cả mọi người đang sử dụng bố trí tự động. Bố cục tự động thật kinh khủng trong Xcode 4 và Xcode 5 chỉ mới được phát hành, vì vậy đây là một giả định đáng ngờ.
Glenn Maynard

1
Nhưng trong triển vọng đây là một giải pháp tốt hơn sau đó thay đổi kích thước khung của cửa sổ gốc hoặc thanh trạng thái.
Igor

Theo như tôi có thể nói, giải pháp của Apple không hoạt động nếu rootViewControll của bạn là splitViewControll.
Vern Jensen

8

Tôi đã xem rất nhiều rất nhiều và rất nhiều hướng dẫn để khắc phục vấn đề chết tiệt này. Nhưng không ai trong số họ làm việc! Đây là giải pháp của tôi và nó hiệu quả với tôi:

if( [[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f ) {
    float statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
    for( UIView *v in [self.view subviews] ) {
        CGRect rect = v.frame;
        rect.origin.y += statusBarHeight;
        v.frame = rect;
    }
}

Logic rất đơn giản. Tôi thay đổi tất cả các chế độ xem của trẻ em trên chế độ self.view với 20 pixel. Đó là tất cả. Sau đó, ảnh chụp màn hình sẽ hiển thị giống như iOS 6 đã làm. Tôi ghét thanh trạng thái iOS7! ~ "~


2
Tôi nên thêm cái này ở đâu? trong ứng dụng đại biểu đã khởi chạy với các tùy chọn?
mhmdshawqi

Khi tôi làm điều này, thanh trạng thái của tôi chuyển sang màu trắng
ropo

6

Một thay thế nhỏ cho câu trả lời của Archy Holt, đơn giản hơn một chút:

a. Đặt UIViewControllerBasedStatusBarAppearancethành NOtrong info.plist

b. Trong AppDelegate's application:didFinishLaunchingWithOptions:, gọi:

if ([[UIDevice currentDevice].systemVersion floatValue] < 7)
{
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
}
else
{
    // handling statusBar (iOS7)
    application.statusBarStyle = UIStatusBarStyleLightContent;
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
    self.window.clipsToBounds = YES;

    // handling screen rotations for statusBar (iOS7)
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidChangeStatusBarOrientationNotification:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
}

Và thêm phương thức:

- (void)applicationDidChangeStatusBarOrientationNotification:(NSNotification *)notification
{
    // handling statusBar (iOS7)
    self.window.frame = [UIScreen mainScreen].applicationFrame;
}

Bạn cũng có thể xem xét phân lớp UIWindowđể xử lý UIApplicationDidChangeStatusBarOrientationNotificationchính nó.


Bạn có vấn đề với PresentViewCont điều khiển: hoạt hình: hoàn thành :?
Tùng Đỗ

@ Tùng, đúng, vì vậy tôi đã thực hiện một giải pháp thay thế hoạt động tốt hơn: stackoverflow.com/questions/18294872/ đá
Cur

5

Tôi đã sử dụng điều này trong tất cả các bộ điều khiển xem của tôi, nó đơn giản. Thêm dòng này trong tất cả các phương thức viewDidLoad của bạn:

- (void)viewDidLoad{
    //add this 2 lines:
    if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;

    [super viewDidLoad];
}

1
Làm việc như một cơ duyên, và chết dễ dàng. Trong chuyển động ruby, trước lệnh gọi siêu sử dụng: self.edgesForExtendsLayout = UIRectEdgeNone if responssToSelector ("edgeForExtendsLayout")
tehprofigator

4

Hãy thử phương pháp đơn giản này ....

Bước 1 : Để thay đổi trong đơnviewController

[[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleBlackOpaque];

Bước 2 : Để thay đổi toàn bộ ứng dụng

info.plist
      ----> Status Bar Style
                  --->UIStatusBarStyle to UIStatusBarStyleBlackOpaque

Bước 3 : Cũng thêm cái này vào từng cái viewWillAppearđể điều chỉnh statusbarchiều cao choiOS7

    [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 7) {
        CGRect frame = [UIScreen mainScreen].bounds;
        frame.origin.y+=20.0;
        frame.size.height-= 20.0;
        self.view.frame = frame;
        [self.view layoutIfNeeded];
    }


3

Tôi đã đạt được thanh trạng thái như iOS 6 trong iOS 7.

Đặt UIViewControllBasingStatusBarAppurdy thành NO trong info.plist

Pase mã này trong - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsphương thức

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    self.window.clipsToBounds =YES;
    self.window.frame =  CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height);

    //Added on 19th Sep 2013
    NSLog(@"%f",self.window.frame.size.height);
    self.window.bounds = CGRectMake(0,0, self.window.frame.size.width, self.window.frame.size.height);
}

Nó có thể đẩy tất cả các chế độ xem của bạn xuống 20 pixel. Để sử dụng mã sau đây trong -(void)viewDidAppear:(BOOL)animatedphương thức

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    CGRect frame=self.view.frame;
    if (frame.size.height==[[NSUserDefaults standardUserDefaults] floatForKey:@"windowHeight"])
    {
        frame.size.height-=20;
    }
    self.view.frame=frame;
}

Bạn phải đặt giá trị của windowHeight Userdefaults sau khi cấp phát cửa sổ trong Phương thức didFinishLauncing như

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[[NSUserDefaults standardUserDefaults] setFloat:self.window.frame.size.height forKey:@"windowHeight"];

Cách tiếp cận tốt hơn là làm cho UINavestionBar của bạn heightbằng 64 thay vì 44. Sau đó, thanh của bạn sẽ mở rộng đến đỉnh như trong các ứng dụng của Apple.
Aaron Brager

@AaronBrager Nhưng yêu cầu của tôi là hiển thị thanh trạng thái kiểu iOS 6.
Sa mạc hoa hồng

Bạn có thể vui lòng thêm giải pháp cho Định hướng cảnh quan iOS 7 không?. Tôi đang làm điều tương tự. nhưng nó không hoạt động trong Cảnh quan iOS 7.
sathiamoorthy

@DesertRose THX! Điều này làm việc cho tôi nhưng nó cắt đứt uitabbar ở phía dưới. Tôi có một ứng dụng dựa trên bộ điều khiển thanh tab với 3 lượt xem, 2 trong số đó là trình điều khiển bảng.
marciokoko

1
UNTIL Tôi xoay thiết bị (thiết bị iOS 7 của tôi là iPad), điều này khắc phục hoàn hảo. Nhưng một khi tôi xoay, thanh màu đen vẫn giữ chính xác vị trí của nó và "chế độ xem" (xin lỗi nếu đó là thuật ngữ kỹ thuật sai, tôi là một anh chàng PhoneGap / web) duy trì chiều cao bị thu hẹp của mình - ngoại trừ chiều cao không còn nữa, đó là chiều rộng. Giải pháp này không hỗ trợ xoay vòng nhưng đó là cách khắc phục tốt nhất tôi từng thấy - làm thế nào để cải thiện việc xoay vòng thiết bị? Cảm ơn!
tylerl

2

Nếu bạn đang sử dụng Trình tạo giao diện, hãy thử điều này:

Trong tệp xib của bạn:

1) Chọn chế độ xem chính, đặt màu nền thành màu đen (hoặc bất kỳ màu nào bạn muốn thanh trạng thái là

2) Đảm bảo nền là một khung nhìn phụ khép kín được định vị là con cấp cao nhất của chế độ xem của bộ điều khiển.
Di chuyển nền của bạn để trở thành con trực tiếp của chế độ xem của bộ điều khiển. Kiểm tra bảng điều khiển tự động để đảm bảo rằng bạn đã khóa tất cả các cạnh khung, kích hoạt cả hai trục linh hoạt và nếu đây là UIImageView, hãy đặt chế độ nội dung thành Tỷ lệ để điền. Về mặt lập trình, điều này chuyển thành contentMode được đặt thành UIViewContentModeScaleToFill và có mặt nạ tự động thay đổi kích thước của nó thành (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight).

3) Bây giờ di chuyển mọi thứ bị khóa lên trên cùng - giảm 20 điểm và đặt iOS 6/7 delta Y thành -20.
Tất cả trẻ em cấp cao nhất bị khóa vào khung trên cùng trong bảng điều khiển tự động cần phải được di chuyển xuống 20pts và đặt iOS 6/7 delta Y của chúng thành -20. (Cmd chọn tất cả những thứ đó và nhấp vào mũi tên xuống 20 lần - có cách nào tốt hơn không?)

4) Điều chỉnh chiều cao delta iOS 6/7 của tất cả các mục trên có chiều cao linh hoạt. Bất kỳ mục nào bị khóa ở đỉnh và đáy khung và có chiều cao linh hoạt được bật trong bảng điều khiển tự động cũng phải có chiều cao delta 6/7 của iOS được đặt thành 20. Điều đó bao gồm chế độ xem nền được đề cập ở trên. Điều này có vẻ chống trực quan, nhưng do thứ tự được áp dụng, nên nó là cần thiết. Chiều cao khung hình được đặt trước (dựa trên thiết bị), sau đó áp dụng đồng bằng và cuối cùng mặt nạ tự động được áp dụng dựa trên vị trí bù của tất cả các khung con - hãy suy nghĩ một chút, nó sẽ có ý nghĩa.

5) Cuối cùng, các mục đã bị khóa ở khung dưới cùng nhưng không phải khung trên cùng không cần deltas.

Điều đó sẽ cung cấp cho bạn thanh trạng thái giống hệt nhau trong iOS7 và iOS6.

Mặt khác, nếu bạn muốn tạo kiểu iOS7 trong khi duy trì khả năng tương thích iOS6, thì hãy đặt giá trị chiều cao delta Y / delta thành 0 cho chế độ xem nền.

Để xem thêm thông tin di chuyển iOS7, hãy đọc toàn bộ bài đăng: http://uncompiled.blogspot.com/2013/09/legacy-compiverse-offsets-in-ios7.html


Không đồng bằng châu thổ khi sử dụng bố trí ô tô
lostintranslation

2

Giải pháp của tôi là thêm một điểm UIViewcó chiều cao 20 điểm trên cùng của cửa sổ khi trên iOS 7. Sau đó, tôi đã tạo một phương thức trong lớp AppDelegate của mình để hiển thị / ẩn nền thanh trạng thái "rắn". Trong application:didFinishLaunchingWithOptions::

// ...

// Add a status bar background
self.statusBarBackground = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.window.bounds.size.width, 20.0f)];
self.statusBarBackground.backgroundColor = [UIColor blackColor];
self.statusBarBackground.alpha = 0.0;
self.statusBarBackground.userInteractionEnabled = NO;
self.statusBarBackground.layer.zPosition = 999; // Position its layer over all other views
[self.window addSubview:self.statusBarBackground];

// ...
return YES;

Sau đó, tôi đã tạo một phương thức để làm mờ / tắt nền của thanh trạng thái màu đen:

- (void) showSolidStatusBar:(BOOL) solidStatusBar
{
    [UIView animateWithDuration:0.3f animations:^{
        if(solidStatusBar)
        {
            [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
            self.statusBarBackground.alpha = 1.0f;
        }
        else
        {
            [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
            self.statusBarBackground.alpha = 0.0f;
        }
    }];
}

Tất cả tôi phải làm bây giờ là cuộc gọi là [appDelegate showSolidStatusBar:YES]khi cần thiết.


2

Đây có thể là một vấn đề quá lớn nếu bạn sử dụng Bố cục tự động vì bạn không thể trực tiếp thao tác các khung nữa. Có một giải pháp đơn giản mà không cần quá nhiều công việc.

Cuối cùng tôi đã viết một phương thức tiện ích trong Lớp tiện ích và gọi nó từ tất cả các viewDidLayoutSubviewsPhương thức của bộ điều khiển xem .

+ (void)addStatusBarIfiOS7:(UIViewController *)vc
    {
        if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
            CGRect viewFrame = vc.view.frame;
            if(viewFrame.origin.y == 20) {
                //If the view's y origin is already 20 then don't move it down.
                return;
            }
            viewFrame.origin.y+=20.0;
            viewFrame.size.height-= 20.0;
            vc.view.frame = viewFrame;
            [vc.view layoutIfNeeded];
        }
    }

Ghi đè viewDidLayoutSubviewsphương thức của bạn trong trình điều khiển xem, nơi bạn muốn thanh trạng thái. Nó sẽ giúp bạn vượt qua gánh nặng của Autolayout.

- (void)viewDidLayoutSubviews
{
    [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
    [super viewDidLayoutSubviews];
    [MyUtilityClass addStatusBarIfiOS7:self];
}

1

Cách dễ nhất để làm như vậy là cài đặt SDK cũ hơn vào Xcode mới nhất của bạn.

Làm cách nào để cài đặt SDK cũ hơn vào Xcode mới nhất?

  1. Bạn có thể tải SDK iOS 6.1 từ http: //www.4 Shared.com/zip/NlPgsxz6/iPhoneOS61sdk.html hoặc tải xuống Xcode cũ hơn và lấy SDK từ nội dung của nó

  2. Giải nén và dán thư mục này vào /Appluggest/Xcode.app/Contents/Developer/Plevelops/iPhoneOS.pl platform / Developer / DDKs

  3. Khởi động lại xcode.

  4. Bây giờ bạn có thể chọn SDK cũ hơn trong cài đặt bản dựng dự án của bạn

Hy vọng nó sẽ giúp bạn. Nó làm việc cho tôi =)


đã làm cho tôi. cảm ơn @marcelosalloum nhưng vẫn đang tìm cách khắc phục cho ứng dụng phonegap (uiwebview) của tôi để hỗ trợ thanh trạng thái trong suốt của iOS7 để cập nhật ứng dụng của tôi trong tương lai. cảm ơn lần nữa ;)
nghĩa hanism

@marcellosaloum, bạn có chắc ứng dụng sẽ được Apple chấp nhận? Họ cho biết các ứng dụng được biên dịch bằng XCode 4 sẽ không còn được chấp nhận nữa ... vì thực tế điều đó có nghĩa là SDK iOS 6.
Valerio

Ứng dụng của tôi đã thực sự được chấp nhận vì Xcode5 có thể biên dịch SDK iOS cũ hơn. Tôi không chắc chắn nếu AppStore sẽ từ chối các ứng dụng được xây dựng Xcode4 nhưng (Xcode4! = SDK iOS 6) như bạn đã nói.
marcelosalloum

Đó có phải là sau ngày 1 tháng 2 không? Trong ngày đó Apple đã thực hiện điều đó bắt buộc.
Valerio

Không, lần cuối chạm vào mã năm ngoái, dân gian. Không biết Apple đã thực hiện điều đó bắt buộc (mặc dù không vui khi biết). Bạn vui lòng gửi ở đây các liên kết nói rằng? Chúc mừng
marcelosalloum

1

Khi sử dụng presentViewController:animated:completion:sai lầm window.rootViewController.view, tôi phải tìm một cách tiếp cận khác cho vấn đề này. Cuối cùng tôi đã có nó để làm việc với các mô-đun và phép quay bằng cách phân lớp UIView của rootViewControll của tôi.

.h

@interface RootView : UIView

@end

.m

@implementation RootView

-(void)setFrame:(CGRect)frame
{
    if (self.superview && self.superview != self.window)
    {
        frame = self.superview.bounds;
        frame.origin.y += 20.f;
        frame.size.height -= 20.f;
    }
    else
    {
        frame = [UIScreen mainScreen].applicationFrame;
    }

    [super setFrame:frame];
}

- (void)layoutSubviews
{
    self.frame = self.frame;

    [super layoutSubviews];
}

@end

Bây giờ bạn có một cách giải quyết mạnh mẽ cho hoạt hình iOS7.


1

Tôi trễ câu trả lời này, nhưng tôi chỉ muốn chia sẻ những gì tôi đã làm, về cơ bản là giải pháp dễ nhất

Trước hết- > Chuyển đến info.plistTệp của bạn và thêm Kiểu thanh trạng thái-> Kiểu đen trong suốt (Alpha là 0,5)

Bây giờ, ở đây nó đi: -

Thêm mã này trong AppDelegate.m của bạn

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
     //Whatever your code goes here
  if(kDeviceiPad){

     //adding status bar for IOS7 ipad
         if (IS_IOS7) {
              UIView *addStatusBar = [[UIView alloc] init];
              addStatusBar.frame = CGRectMake(0, 0, 1024, 20);
              addStatusBar.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; //change this to match your navigation bar
              [self.window.rootViewController.view addSubview:addStatusBar];
                    }
                }
    else{

         //adding status bar for IOS7 iphone
        if (IS_IOS7) {
            UIView *addStatusBar = [[UIView alloc] init];
            addStatusBar.frame = CGRectMake(0, 0, 320, 20);
            addStatusBar.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; //You can give your own color pattern
            [self.window.rootViewController.view addSubview:addStatusBar];
        }

    return YES;
   }

0

Giải pháp rất đơn giản của tôi (giả sử bạn chỉ hỗ trợ định hướng dọc) là xác định lại giới hạn cửa sổ ứng dụng cho các phiên bản iOS dưới 7, trong phương thức đại biểu ứng dụng didFinishLaunchingWithOptions:

CGRect screenBounds = [[UIScreen mainScreen] bounds];
if ([HMService getIOSVersion] < 7) {
    // handling statusBar (iOS6) by leaving top 20px for statusbar.
    screenBounds.origin.y = 20;
    self.window = [[UIWindow alloc] initWithFrame:screenBounds];
}
else {
    self.window = [[UIWindow alloc] initWithFrame:screenBounds];
}

Mã của bạn chỉ thay đổi 'y' từ 0 đến 20 nhưng không điều chỉnh độ cao phù hợp, do đó bạn nên thêm screenBound.size.height - = 20; ngay sau screenBound.origin.y = 20;
Amit C.

0

Bạn có thể ẩn tất cả các thanh trạng thái cùng nhau. Vì vậy, ứng dụng của bạn sẽ ở chế độ toàn màn hình. Tôi nghĩ đó là điều tốt nhất bạn sẽ nhận được.

UIStatusBarStyleNone hoặc đặt trong cài đặt đích.


2
nơi chỉ định UIStatusbarstylenone
user4951

0

Các bước để ẩn thanh trạng thái trong iOS 7:

1.Đi tới tập tin thông tin ứng dụng của bạn.

2.And Set, Xem giao diện thanh trạng thái dựa trên bộ điều khiển: Boolean NO

Hy vọng tôi đã giải quyết vấn đề thanh trạng thái .....


0

Để tiếp tục làm việc với setStatusBarHidden: Tôi sử dụng danh mục này:

@interface UIApplication (StatusBar)

-(void)setIOS7StatusBarHidden:(BOOL)statusBarHidden;

@end

@implementation UIApplication (StatusBar)

-(void)setIOS7StatusBarHidden:(BOOL)statusBarHidden{
    if (!IOS7) {
        [self setStatusBarHidden:statusBarHidden];
        return;
     }

    if ([self isStatusBarHidden] == statusBarHidden) {
        return;
    }

    [self setStatusBarHidden:statusBarHidden];
    [self keyWindow].clipsToBounds = YES;
    CGFloat offset = statusBarHidden ? 0 : 20;
    [self keyWindow].frame =  CGRectMake(0,offset,[self keyWindow].frame.size.width,[self keyWindow].frame.size.height-offset);
    [self keyWindow].bounds = CGRectMake(0, offset, [self keyWindow].frame.size.width,[self keyWindow].frame.size.height);
}

@end


0

Điều này có thể là quá muộn để chia sẻ, nhưng tôi có một cái gì đó để đóng góp có thể giúp đỡ ai đó, tôi đã cố gắng phân loại UINavestionBar và muốn làm cho nó trông giống như ios 6 với thanh trạng thái màu đen và văn bản thanh trạng thái màu trắng.

Đây là những gì tôi thấy làm việc cho điều đó

        self.navigationController?.navigationBar.clipsToBounds = true
        self.navigationController?.navigationBar.translucent = false
        self.navigationController?.navigationBar.barStyle = .Black
        self.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()

Nó làm cho nền thanh trạng thái của tôi màu đen, văn bản thanh trạng thái màu trắng và màu của thanh điều hướng màu trắng.

iOS 9.3, XCode 7.3.1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.