2013-10-23 44 views
5

Tôi đã tạo thư viện bánh mì tùy chỉnh (rất đơn giản, chỉ một hộp xuất hiện dưới thanh điều hướng). Hoạt động tốt trong iOS 6 là nhóm mục tiêu của tôi. Nhưng kể từ khi iOS 7 đã phát hành nó đã không hiển thị chính xác.Cách sửa chữa chiều cao và chiều rộng của thanh trạng thái iOS 7

Con đường tôi đã cố gắng để sửa chữa nó đã được thông qua mã này:

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7,0")){ 
    self.offset = [UIApplication sharedApplication].statusBarFrame.size.height + self.viewController.navigationController.navigationBar.frame.size.height; 
} 

tôi đã thực hiện một macro có thể được tìm thấy trên Stack tràn để phát hiện nếu phiên bản iOS 7 và sau đó thêm chiều cao thanh trạng thái và chiều cao điều hướng. Thao tác này hoạt động chính xác ở chế độ dọc trong iOS 7, nhưng khi tôi chuyển sang chế độ chỉnh sửa ngang sẽ trở thành 512 ?.

Ai đó có thể giải thích cách thức này xảy ra và cách tôi có thể khắc phục điều này?


Quyết định chia mã vì nhận xét và xem chính xác điều gì gây ra sự khác biệt. Những gì tôi đã làm là:

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

CGFloat navBar = self.viewController.navigationController.navigationBar.frame.size.height; 
self.offset = statusBarHeight + navBar; 
NSLog(@"Init - statusBarHeight: %f, navBar: %f", statusBarHeight, navBar); 

Khi nó quay ra đối với một số lý do statusbar là trong bức chân dung 20 và trong bối cảnh đó là 480


Điều này là do chiều cao và chiều rộng được quay lại, câu trả lời đến từ bình luận

+1

tôi đoán là trong cảnh quan [UIApplication sharedApplication] .statusBarFrame.size.width và [UIApplication sharedApplication] .statusBarFrame.size.height giá trị được chuyển –

+0

này là đúng, cảm ơn nếu bạn có thể gửi câu trả lời của bạn tôi có thể chấp nhận nó – Haagenti

Trả lời

12

Vì trước đây tôi đã thực hiện cùng một "bản sửa lỗi", tôi đã nhận thấy rằng trong cảnh quan

[UIApplication sharedApplication].statusBarFrame.size.width 

[UIApplication sharedApplication].statusBarFrame.size.height 

giá trị được chuyển.

+0

Câu trả lời này không hoạt động với iOS 8, báo cáo chính xác chiều cao của thanh trạng thái. –

7

Travis Jeffery cung cấp một lời giải thích tuyệt vời trên http://travisjeffery.com/b/2013/05/using-the-status-bars-frame-in-ios/

Hãy để tôi sao chép nó từ trang web của mình:

"Bí quyết để khung và chiều cao thanh trạng thái là để chắc chắn rằng bạn đã chuyển đổi nó vào không gian tọa độ của chế độ xem mà bạn quan tâm, điều này có thể sẽ là chế độ xem hoặc chế độ xem phụ của UIViewController. "

CGRect statusBarFrame = [yourView.window convertRect:UIApplication.sharedApplication.statusBarFrame toView:yourView]; 
CGFloat statusBarHeight = statusBarFrame.size.height; 
2

Thay thế sẽ là sử dụng chế độ xem của điều khiển topLayoutGuide.length tương ứng với chiều cao của thanh trạng thái.

Các vấn đề liên quan