5

Tôi có một ứng dụng theo thẻ với một UISplitView ở một trong các tab.Tại sao didRotateFromInterfaceOrientation trong một danh mục gây ra sự cố với UISplitView?

Tôi đang sử dụng UITabBarController+iAds và gặp sự cố mà nhà phát triển cho đến nay chưa thể giải quyết được.

Thật không may, đây là những gì UI của tôi trông giống như trên vòng quay của iPad:

enter image description here enter image description here

Phạm trù được gọi từ bên trong appdelegate và mã sau đây được sử dụng để làm mới quảng cáo khi thiết bị được xoay:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    NSLog(@"Did rotate"); 
    [self layoutBanner]; 
} 

Như tôi đã hiểu, điều này ngăn không cho MasterViewController hoạt động chính xác nhưng tôi không hiểu đầy đủ nguyên tắc đằng sau tầng tầng của các cuộc gọi phương thức để hiểu cách khắc phục vấn đề này.

+0

Điều gì sẽ xảy ra nếu bạn không gọi là '[self layoutBanner]' ? –

+0

Các sự cố vẫn xuất hiện nhưng biểu ngữ quảng cáo không được tải lại. – Leon

Trả lời

7

Đây là những gì Apple Developer Guide nói về phương pháp didRotateFromInterfaceOrientation:

lớp con có thể ghi đè phương pháp này để thực hiện các hành động bổ sung ngay sau khi quay.

...

triển khai của bạn của phương pháp này phải gọi siêu tại một số điểm trong khi thực hiện nó.

Tôi đoán tốt nhất là các thao tác vẽ nhất định trong trình điều khiển chế độ xem không xảy ra vì bạn không gọi phương thức siêu lớp từ việc triển khai của bạn. Cố gắng sửa chữa nó như thế này:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; 
    NSLog(@"Did rotate"); 
    [self layoutBanner]; 
} 

UPDATE: Trên iOS 8 phương pháp này không được chấp và không còn gọi khi xoay thiết bị. Thay vào đó, bạn cần phải sử dụng một phương pháp mới:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
    NSLog(@"Szie changed"); 
    [self layoutBanner]; 
} 
+0

Tôi chắc chắn rằng tôi đã thử điều này và nó không hoạt động. Tuy nhiên, tôi không thể thử lại điều này kể từ iOS 8 vì một số lý do didRotateFromInterfaceOrientation không được gọi trên thiết bị iOS 8. Nó có vẻ là một vấn đề trong Danh mục chứ không phải là ViewControllers. – Leon

+0

Reaason là Apple đã làm cho nó không được chấp nhận trong iOS 8. Tôi cập nhật câu trả lời của tôi để phản ánh điều đó. – Bedford

+0

Được rồi điều này làm việc và nó không bị ảnh hưởng trong các ảnh chụp màn hình. Bây giờ tôi chỉ cần sửa phần còn lại của mã. Cảm ơn! – Leon

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