在 iOS 11 中,UIViewController 的 transitionFromViewController 从不调用它的完成块
Posted
技术标签:
【中文标题】在 iOS 11 中,UIViewController 的 transitionFromViewController 从不调用它的完成块【英文标题】:In iOS 11 , UIViewController's transitionFromViewController never calls its completion block 【发布时间】:2017-09-28 17:20:41 【问题描述】:从 ios 11 开始,UIViewController
的 transitionFromViewController:toViewController:duration:options:animations:completion:
方法似乎不再调用其完成块。
下面的示例代码sn-p:
[self addChildViewController:toVC];
[fromVC willMoveToParentViewController:nil];
[self transitionFromViewController:fromVC
toViewController:toVC
duration:0.4
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^
completion:^(BOOL finished)
NSLog(@"Completion called"); // this completion is never executed
];
这导致我在正确转换视图和动画方面遇到各种问题。有没有其他人遇到过这种行为,和/或发现了解决方法?
【问题讨论】:
【参考方案1】:事实证明,在将toVC
作为子视图控制器添加到self
之后,我并没有明确地将toVC.view
作为子视图添加到self.view
。奇怪的是,这在 iOS 11 与以前的版本中表现不同,但这成功了:
[self addChildViewController:toVC];
[self.view addSubview:toVC.view]; // This line is what is needed
[fromVC willMoveToParentViewController:nil];
[self transitionFromViewController:fromVC
toViewController:toVC
duration:0.4
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^
completion:^(BOOL finished)
NSLog(@"Completion called");
];
【讨论】:
我可以确认,当不调用完成块时,手动添加视图会有所帮助。在我的情况下,只有当新的视图控制器有一个带有 refreshControl 的集合视图时才需要。一旦我删除了 refreshControl,完成块就会被调用。很奇怪。 @Klaas 符合我的情况,尽管我从来没有想过它会是特定的极端情况。确实非常奇怪的行为。以上是关于在 iOS 11 中,UIViewController 的 transitionFromViewController 从不调用它的完成块的主要内容,如果未能解决你的问题,请参考以下文章
iOS - UIVIewController 中的 UITableView 不显示所有行 [Swift]
如何在 Swift 4 中从 WKWebView 获取 cookie 值?
iOS Dev - 如何检测用户通过按“返回”访问此 UIViewController
ios ~ UITableView 编辑(cell的插入, 删除, 移动)