2012-06-23 20 views
5

Trong một segue tùy chỉnh, tôi có quá trình chuyển đổi đơn giản sau đây:hoạt hình tuỳ chỉnh cho UINavigationController đẩy không render navbar đúng

- (void) perform { 
    UIViewController *src = (UIViewController *) self.sourceViewController; 
    UIViewController *dst = (UIViewController *) self.destinationViewController; 
    [UIView transitionWithView:src.navigationController.view duration:1 
         options:UIViewAnimationOptionTransitionFlipFromBottom 
        animations:^{ 
         [src.navigationController pushViewController:dst animated:NO]; 
        } 
        completion:NULL]; 
} 

Nội dung xem sinh động tốt. Tuy nhiên, khi thực hiện hoạt ảnh, thanh điều hướng ở trên cùng có bố cục lộn xộn (các nút được nhồi nhét ở góc trên bên trái, không có tiêu đề), chỉ xuất hiện khi hoạt ảnh kết thúc. Bất cứ ai biết những gì tôi đã làm sai và làm thế nào để sửa chữa nó? Cảm ơn!

Trả lời

5

Đã giải quyết được vấn đề của tôi. Các mã ban đầu là thực sự không chính xác cho làm thế nào UINavigationController hoạt động và tương tác với UIViewControllers nó quản lý. (Thứ Annoyingly giống như những gì tôi đã làm trong OP có thể được tìm thấy như một giải pháp trong bài đăng cũ hơn SO.)

Dưới đây là mã mà làm việc cho tôi (với một phân minh nhỏ):

- (void) perform { 
    UIViewController *src = (UIViewController *) self.sourceViewController; 
    UIViewController *dst = (UIViewController *) self.destinationViewController; 
    [UIView transitionFromView:src.view 
         toView:dst.view 
         duration:1 
         options:UIViewAnimationOptionTransitionFlipFromBottom 
        completion:nil]; 
    [UIView transitionFromView:src.navigationItem.titleView 
         toView:dst.navigationItem.titleView 
         duration:1 
         options:UIViewAnimationOptionTransitionFlipFromBottom 
        completion:nil]; 
    [src.navigationController pushViewController:dst animated:NO]; 
} 

ngụy biện: điều này sẽ animate thanh điều hướng tách biệt với chế độ xem nội dung, vì vậy bạn có hai phần lật thay vì toàn bộ màn hình. Ban đầu tôi đã cố gắng để làm:

[UIView transitionFromView:src.navigationController.view 
         toView:dst.navigationController.view 

Nhưng điều đó không thành công vì sở hữu navigationController 1) đích thậm chí không được thiết lập nhưng cho đến khi nó đẩy vào một bộ điều khiển nav, và 2) ngay cả khi nó đã được tôi muốn được giới thiệu cho cùng một lượt xem! Tôi quên rằng

Quan điểm cho một bộ điều khiển chuyển hướng chỉ là một container cho nhiều quan điểm khác, bao gồm một thanh điều hướng, một thanh công cụ tùy chọn, và xem chứa nội dung tùy chỉnh của bạn ... Mặc dù nội dung của thay đổi chế độ xem thanh điều hướng và thanh công cụ, chính chế độ xem không ... đối tượng điều khiển điều hướng tạo nội dung của thanh điều hướng động bằng cách sử dụng các mục điều hướng (trường hợp của lớp UINavigationItem) liên kết với bộ điều khiển chế độ xem trên ngăn xếp điều hướng. Để thay đổi nội dung của thanh điều hướng, do đó bạn phải định cấu hình các mục điều hướng cho chế độ xem tùy chỉnh bộ điều khiển của mình. (docs)

+0

Ai đó có thể giải thích lý do tại sao điều này bị giảm giá? – qix

+0

Cảm ơn rất nhiều! Mã của bạn đã giúp tôi tìm ra cách tôi chỉ có thể chuyển đổi thanh điều hướng trong khi đẩy, nhưng không thể chuyển đổi chế độ xem nội dung – Denis

0

Một "ngụy biện" khác? tôi đặt

[src.navigationController pushViewController:dst animated:YES]; 

trước

[UIView transitionFromView ... 

để điều khiển chuyển hướng là có thể truy cập trong phương pháp viewDidLoad của đích.

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