2013-09-23 21 views
11

Tôi đã đặt UITabBar làm Opaque trong Bảng phân cảnh, nhưng tôi vẫn có vẻ bị chuyển đổi. Khi tôi đặt UITabBarController tùy chỉnh của mình với setBarStyle, chỉ có OpaqueBlack khả dụng.Tự động trả lời bỏ qua UITabBar (nội dung bên dưới thanh) trên iOS7

Nhưng ít nhất là vấn đề. Không có vấn đề gì tôi làm, nội dung của quan điểm của tôi được định vị dưới thanh tab, giống như nó bị bỏ qua bởi ayutolayout. Trên bảng phân cảnh mọi thứ đều ổn. một cái gì đó lộn xộn trong thời gian chạy?

Oh điều quan trọng nhất. Sự cố chỉ xảy ra trên iOS7!

Dưới đây là các thiết lập ViewController tôi trong kịch bản:

enter image description here

Và đây là nội dung có vấn đề (UITableView) mà được đặt dưới UITabBar trên ứng dụng iOS7. Có vẻ tốt đẹp trong kịch bản mặc dù:

enter image description here

Và cuối cùng UITableView chế:

enter image description here

Trả lời

21

Đưa này trên viewDidLoad, giải quyết vấn đề:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { 
    [self setEdgesForExtendedLayout:UIRectEdgeNone]; 
} 
+1

có làm việc tốt cho tôi. nhưng ứng dụng của tôi có alb Tabbacontroller. Phần còn lại của chế độ xem đang hoạt động tốt. Vấn đề trong bộ điều khiển xem Tabbar. giả sử tôi có 5 tab. 1. khi tôi bấm vào tab (Danh sách màn hình mở) nó làm việc tốt khi tôi bấm vào danh sách chi tiết mở tốt. lên đến nhưng nó làm việc tốt 2. khi tôi bấm vào tab 2 (danh sách khác) mở. thời điểm đó khi tôi nhấp vào tab1 hơn khung màn hình chính của màn hình chi tiết, giảm xuống còn 64px. tôi đã cố gắng tăng mạnh nhưng không hoạt động .. tôi có thể làm gì trong trường hợp này ?? – Hitarth

+5

Thay vì kiểm tra phiên bản cụ thể, tốt hơn nên kiểm tra sự tồn tại của bộ chọn: 'if ([self respondsToSelector: @selector (setEdgesForExtendedLayout :)])' – DarkDust

4

tạo ra những macros tại của bạn dự án của <projectname>-Prefix.pch tập tin để họ sẽ làm việc trên toàn cầu:

#define SYSTEM_VERSION_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) 
#define SYSTEM_VERSION_GREATER_THAN(v)    ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) 
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 

Sau đó đặt này sau khi [super viewDidLoad] trong viewDidLoad phương pháp của mỗi viewController đó là có vấn đề này:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) 
{ 
     [self setEdgesForExtendedLayout:UIRectEdgeNone]; 
} 
+4

Thay vì kiểm tra phiên bản cụ thể, tốt hơn nên kiểm tra sự tồn tại của bộ chọn: 'if ([self respondsToSelector: @selector (setEdgesForExtendedLayout :)])' – DarkDust

9

Xcode cũng cung cấp khả năng programatic:

[self setEdgesForExtendedLayout:UIRectEdgeNone]; 

trong kịch bản của bạn cho một cho ViewController qua Mở rộng các cạnh phần:

enter image description here

Đơn giản chỉ cần vô hiệu hóa cả Dưới Lên trên BarsDưới Bars đáy tùy chọn. Chúng được bật theo mặc định.

+0

Cảm ơn bạn, câu trả lời của bạn phải được chấp nhận. – Blacky

0

Trong Swift UIRectEdgeNone không khả dụng. Bạn có thể đạt được điều tương tự với mã sau:

edgesForExtendedLayout = []