2013-09-27 249 views
7

Tôi đã theo các hướng dẫn sau đây để di chuyển thanh điều hướng của tôi xuống để nó không được bao phủ bởi các thanh trạng thái trong xcode 5/iOS7:Hãy Navigation Bar căng đằng sau thanh trạng thái trong Xcode 5/iOS7

Status bar and navigation bar issue in IOS7

Nhưng bây giờ trong iOS7 có một khoảng trống ở trên cùng, nơi thanh trạng thái sẽ và tôi muốn thanh điều hướng điền vào khu vực này quá

Ví dụ, ứng dụng Facebook/twittter/Instagram iOS7 có nền thanh điều hướng phía sau thanh trạng thái. Làm thế nào để đạt được điều này?

Xin lỗi nếu tôi không được rõ ràng nhưng thực sự mong muốn có được điều này sắp xếp

Cảm ơn bạn!

+0

bạn đang sử dụng thanh điều hướng tùy chỉnh hoặc built-in? –

Trả lời

0

Nếu bạn muốn kéo dài một UINavigationBar với một tùy chỉnh background-image đằng sau UIStatusBar trong iOS 7 cân nhắc những điều sau đây:

  1. Các UIStatusBar là minh bạch vì nó là.
  2. Đặt barPosition tài sản của UINavigationBar để UIBarPositionTopAttached
  3. Các UINavigationBar background-hình ảnh trong iOS 7 (nếu UIBarPositionTopAttached) có kích thước khác nhau hơn so với trước lên iOS 7 và bạn phải sử dụng chúng: bây giờ chiều cao là 64 điểm

Trong mã (iPhone CHỈ):

// Image needs 64 points height 
NSString* navBarPortraitBackgroundPath = [[NSBundle mainBundle] pathForResource:@"navBarPortraitBackground" ofType:@"png"]; 
NSString* navBarLandscapeBackgroundPath; 


if(UIScreen.mainScreen.bounds.size.height == 568){ 

    // Image needs 64 points height 
    navBarLandscapeBackgroundPath = [[NSBundle mainBundle] pathForResource:@"navBarWideLandscapeBackground" ofType:@"png"]; 

} else { 

    // Image needs 64 points height 
    navBarLandscapeBackgroundPath = [[NSBundle mainBundle] pathForResource:@"navBarLandscapeBackground" ofType:@"png"]; 

} 


[[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithContentsOfFile:navBarPortraitBackgroundPath] forBarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithContentsOfFile:navBarLandscapeBackgroundPath] forBarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsLandscapePhone]; 

Nếu bạn chỉ muốn thay đổi màu nền của UINavigationBar, nó sẽ tự động mở rộng sau UIStatusBar.

Trong Mã số:

[UINavigationBar appearance].barTintColor = [UIColor redColor]; 
+6

Bạn có thể muốn giải thích làm thế nào để thực sự đặt barPosition. – weienw

+0

barPosition là chỉ đọc – jjxtra

21

Bạn muốn thiết lập các barPosition của UINavigationBar.

Bạn có thể làm điều này trong mã:

Hãy ViewController của bạn phù hợp với giao thức UINavigationBarDelegate và thực hiện positionBar: metod. (Giao thức mà bạn thực sự cần là UIBarPositioningDelegate nhưng UINavigationBarDelegate không mở rộng nó.)

@interface SampleViewController() <UINavigationBarDelegate> 
@property (weak, nonatomic) IBOutlet UINavigationBar *navigationBar; 
@end 

@implementation SampleViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    _navigationBar.delegate = self; 
} 

- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar { 
    return UIBarPositionTopAttached; 
} 
@end 

HOẶC trong Storyboard:

Trong Identity Thanh tra UINavigationBar, thêm một User Defined Thuộc tính runtime với KeyPath = barPosition , Loại = Number, và giá trị = 3:

Add User Defined Runtime Attribute

+9

THANK YOU SO SO MUCH CHO TEACHING ME NHỮNG NGƯỜI DÙNG NÀO ĐÚNG RỦI RO THỬ NGHIỆM MENU LÀM. ĐÂY LÀ ĐẤU ĐỦ TUYỆT VỜI CHO TÔI. Tôi sẽ không bao giờ phân lớp một phần tử ui để thay đổi một thuộc tính một lần nữa. – lol

+0

thú vị tìm thấy ở đây, nhưng nó không làm việc cho tôi. Tôi luôn luôn nhận được lỗi sau: "*** Chấm dứt ứng dụng do ngoại lệ uncaught 'NSInternalInconsistencyException', lý do: 'Không thể tự thiết lập các đại biểu trên một UINavigationBar quản lý bởi một bộ điều khiển.'" Nếu tôi ghi đè lên UINavigationViewController và thêm nó ở đó, tôi làm không nhận được một lỗi, nhưng nó không hoạt động ... –

+0

@ lol Tôi chỉ hy vọng bạn đang châm biếm, OO đây không phải là một cái gì đó bạn nên nhận được trong thói quen của tất cả. Nó có thể nhanh chóng trở thành một cơn ác mộng gỡ lỗi. – TheCodingArt