2015-09-24 19 views
8

Tôi có chuyển đổi đẩy tùy chỉnh giữa các bộ điều khiển chế độ xem được nhúng trong UINavigationController.Chuyển đổi tùy chỉnh cho hoạt ảnh đẩy với NavigationController trên iOS 9

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext 
{ 
    UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 
    UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 

    [transitionContext.containerView addSubview:toViewController.view]; 

    ... 

Sau đó, nó tiếp tục và thực hiện hoạt ảnh. Vấn đề là nội dung của toViewController, mặc dù nó đang sử dụng đúng hướng dẫn bố trí tự động bố trí trên cùng bên phải, trình bày nội dung đằng sau thanh điều hướng.

Tuy nhiên, nó hoạt động tốt trên iOS 8 và nếu chúng tôi buộc vẽ lại (ví dụ: gửi ứng dụng lên nền và đưa nó trở lại, hiển thị phương thức ở trên cùng và loại bỏ nó, v.v.) sẽ gây ra toàn bộ hệ thống bố cục tự động để vẽ lại chính nó và chế độ xem của toViewController nhảy tới đúng vị trí (như là hướng dẫn bố cục hàng đầu, x pixel từ thanh điều hướng thay vì x pixel từ đầu màn hình của thiết bị).

Thêm

[self.view setNeedsUpdateConstraints]; 
[self.view layoutIfNeeded]; 

trình nếu đặt trong viewDidAppear:animated, nhưng không hoạt động trên viewDidLoad hoặc viewWillAppear:animated. Đây không phải là một giải pháp như người dùng sẽ thấy nhảy xem khi vẽ lại đang xảy ra tại viewDidAppear:animated

Trả lời

22

tôi đã quản lý để khắc phục vấn đề của tôi bằng cách thêm dòng sau đây trước addSubview::

toViewController.view.frame = [transitionContext finalFrameForViewController:toViewController]; 

Từ Tài liệu của Apple cho finalFrameForViewController:

Trả về hình chữ nhật của khung kết thúc cho chế độ xem của bộ điều khiển chế độ xem được chỉ định.

Hình chữ nhật được trả về bằng phương pháp này thể hiện kích thước của chế độ xem tương ứng ở cuối quá trình chuyển đổi. Đối với chế độ xem bị che phủ trong quá trình trình bày, giá trị được trả về bằng phương pháp này có thể là CGRectZero nhưng nó cũng có thể là một khung hình hợp lệ .

+0

Lifesaver, cảm ơn bạn đời – beebcon

+0

Bạn vừa lưu tôi rất nhiều giờ. Cảm ơn rất nhiều! –

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