Tôi có ứng dụng iPad được tạo bằng mẫu SplitView. Tôi tự hỏi cách tốt nhất để hạn chế ứng dụng của tôi ở chế độ ngang là gì?Làm cách nào để hạn chế ứng dụng của tôi ở chế độ ngang?
Tôi đã cố gắng trọng shouldAutorotateToInterfaceOrientation:
phương pháp trong DetailViewController.m
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
nhưng 4.2 GM vẫn buggy và nó không hiển thị các điểm điều khiển. Tôi có những lựa chọn nào khác?
Xin cảm ơn trước.
UPDATE1
Tôi đã đệ trình một báo cáo lỗi: Bug ID #8620135
Ứng dụng của tôi là gần như hoàn tất và tôi phải tìm một công việc arround vì tôi không nghĩ rằng họ sẽ giải quyết vấn đề này trước khi chính thức ra mắt 4.2 (GM đã hết!)
Để tạo lại lỗi, chỉ cần sử dụng mẫu SplitView và ghi đè lên phía trên phương pháp trong bất kỳ UIViewControllers (RootViewController hoặc DetailViewControllers)
UPDATE2
Tôi đã tìm thấy một công việc xung quanh. (Xem UPDATE3 cho hoàn chỉnh công việc xung quanh)
Set UISupportedInterfaceOrientations chỉ để hỗ trợ Cảnh, điều này sẽ buộc các ứng dụng để bắt đầu trong chế độ phong cảnh cho phép DetailViewController để bắt đầu một cách chính xác (do đó hiển thị chính xác)
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
Nhưng nếu bạn hãy xoay điện thoại, nó quay chế độ Portrait !!!, vì vậy vẫn còn cần thiết để ghi đèshouldAutorotateToIntercafeOrientation
: như trên
Thảo luận:
Nếu điều này không phải là lỗi, tôi sẽ mong đợi một cảnh báo hoặc lỗi thực hiện, ngoại lệ hoặc một cái gì đó khi khởi động ứng dụng theo hướng không được bộ điều khiển xem hỗ trợ. Bên cạnh đó, tại sao chỉ DetailViewController không hiển thị? Nếu điều này sẽ được đặc điểm kỹ thuật, sau đó RootViewController cũng nên không tải sau đó. Bạn không nghĩ sao? nhờ bạn giúp đỡ ...;)
UPDATE3
Sau khi thử nghiệm thêm tôi đã nhận ra rằng trên công việc xung quanh không làm việc trong một số trường hợp. Ví dụ khi khởi động ứng dụng khi thiết bị ở chế độ ngang sẽ không hoạt động !. Vấn đề thực sự có vẻ là trong iOS4.2GM UISplitViewController cần tất cả các bộ điều khiển của nó có tất cả các phép quay có sẵn tại thời gian tải của nó. Vì vậy, là cần thiết để lừa anh ta để nó tải trong chế độ phong cảnh và sau đó không cho phép anh ta để xoay bộ điều khiển xem của nó.
Vì vậy, đây là công việc mới xung quanh cho iBug gây phiền nhiễu này.
Bước 1: Set Info.plist như vậy:
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
Bước 2 Đặt một lá cờ mới trong DetailViewController.m hoặc .h (từ Template SplitView)
BOOL lockRotation = NO; //WORK-ARROUND: Bug ID# 8620135.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
//WORK-ARROUND: Bug ID# 8620135.
if (lockRotation) {
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}else{
return YES;
}
}
- (void)viewDidLoad {
[super viewDidLoad];
//set NO here since this is called before shouldAutorotateToInterfaceOrientation method is called
lockRotation = NO; //WORK-ARROUND: Bug ID# 8620135.
}
- (void)viewDidAppear:(BOOL)animated {
//set YES as soon as possible, but after shouldAutorotateToInterfaceOrientation method was called
lockRotation = YES; //WORK-ARROUND: Bug ID# 8620135.
[super viewDidAppear:animated];
}
LƯU Ý QUAN TRỌNG: Xin lưu ý rằng lỗi này chỉ xuất hiện khi UISplitViewController được tải và không phải mọi lúc chế độ xem của nó xuất hiện. Do đó, để xem lỗi này, hãy đảm bảo ứng dụng đã bị chấm dứt trước đó.
có thể là một lỗi? ;) –
câu hỏi nói rằng bạn đang thực hiện thay đổi trong DetailViewController, đó là bộ điều khiển chính xác sẽ ghi đè phương pháp? –
Tôi đã báo cáo lỗi – nacho4d