2015-02-17 14 views
6

tài liệu iOS cho dismissViewControllerAnimated:completion: trạng thái:Lỗi iOS 8 với bỏ quaViewControllerAnimated: completion: animation?

Nếu bạn hiện một số điều khiển xem liên tiếp, do đó việc xây dựng một chồng của bộ điều khiển xem trình bày, gọi phương pháp này trên một cái nhìn điều khiển thấp hơn trong ngăn xếp bác bỏ quan điểm con mắt của nó Bộ điều khiển và tất cả bộ điều khiển chế độ xem phía trên con đó trên ngăn xếp. Khi điều này xảy ra, chỉ có chế độ xem nhiều nhất được loại bỏ theo kiểu hoạt ảnh ; bất kỳ bộ điều khiển chế độ xem trung gian nào đều bị xóa khỏi ngăn xếp . Chế độ xem nhiều nhất được loại bỏ bằng cách sử dụng kiểu chuyển đổi kiểu phương thức , có thể khác với kiểu được sử dụng bởi các bộ điều khiển chế độ xem khác thấp hơn trong ngăn xếp.

này có nghĩa là khi gạt bỏ hai bộ điều khiển xem phương thức cùng một lúc sử dụng

[[[self presentingViewController] presentingViewController] dismissViewControllerAnimated:YES completion:nil];

các hình ảnh động hiển thị phải là quan điểm phương thức đầu bị sa thải.

Đây thực sự là trường hợp trong iOS 7 và trước đó, nhưng trong iOS 8, hoạt ảnh được hiển thị không phải là chế độ xem nhiều nhất (theo kinh nghiệm của tôi, đây là chế độ xem nhiều nhất thứ hai). Hành vi này có phải là lỗi trong iOS 8 hoặc tôi đang làm điều gì sai?

+1

Bạn có nghĩa là chế độ xem nhiều nhất đột nhiên biến mất ở đầu hoạt ảnh? – AncAinu

+0

Tôi chắc chắn đây là lỗi. Nó cũng xảy ra nếu bạn làm một segue thư giãn mà đi trở lại nhiều bộ điều khiển (nếu tôi nhớ chính xác, trong trường hợp đó, bạn thấy xem đầu biến mất, nhưng cũng một thời gian ngắn, thứ hai để điều khiển cuối cùng). – rdelmar

+0

Có báo cáo lỗi đã được gửi cho Apple không? Tôi không biết làm thế nào để làm điều đó hoặc làm thế nào để kiểm tra. – James

Trả lời

3

Như đã nhận xét ở trên: Tôi thấy chính xác cùng một vấn đề trong ngữ cảnh phân biệt thư giãn. Tôi chỉ Toke hiện giải pháp như mô tả ở đây sử dụng một ảnh chụp màn hình và thêm nó như là một subview cho tất cả viewControllers trung gian: How to dismiss a stack of modal view controllers with animation without flashing on screen any of the presented VCs between the top and bottom?

// this in during unwind in a custom UIStoryboardSegue (that is the reason why it might look wrong with what is what: srcViewController and destViewController 
    UIViewController* aPresentedViewController = destViewController.presentedViewController; 
    while (aPresentedViewController != nil) { 
     if (aPresentedViewController == srcViewController) { 
      break; 
     } 
     UIView *anotherSrcViewCopy = [srcViewController.view snapshotViewAfterScreenUpdates: NO]; 
     anotherSrcViewCopy.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
     [aPresentedViewController.view addSubview:anotherSrcViewCopy]; 
     // recurse through the presentedViewController hierarchy 
     aPresentedViewController = aPresentedViewController.presentedViewController; 
    } 
1

Cùng một vấn đề và cùng giải pháp ở đây hơn @theguy. Đây là phiên bản của tôi trong Swift mà không lặp lại trên tất cả các trình điều khiển chế độ xem:

guard 
    let presentedViewController = segue.destination.presentedViewController, 
    let viewToCopy    = segue.source.view.snapshotView(afterScreenUpdates: false) 
else { return } 

viewToCopy.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
presentedViewController.view.addSubview(viewToCopy) 
Các vấn đề liên quan