UIView.transition 在模拟器中淡出但在设备上不淡出

UIView.transition fades in simulator but not on device

我的电话看起来像这样:

UIView.transition(with: button, duration: 0.5,
                  options: .transitionCrossDissolve,
                  animations: { button.hidden = false },
                  completion: null)

当我用它来显示一个按钮时,它按预期工作,并带有漂亮的淡入效果。当我用它来隐藏(使用 button.hidden = true)时,它在 iOS 模拟器中再次正常工作,但在设备上 - iPhone 或 iPad - 它只是消失了没有褪色。

我能找到的唯一显着差异是我的设备是 运行 iOS 10.2,但模拟器只有 10.1。 Xcode 没有给我下载 10.2 模拟器的选项。

还有什么我可能遗漏的吗?我应该使用其他动画选项吗?

可能值得注意的是,我隐藏和显示的按钮位于导航栏中的 UIBarButtonItem 内。

由于我的按钮在导航栏中,所以我最终使用了 navigationItem.setRightBarButtonItems(buttons, animated: true)。这样,动画就可以在模拟器和设备上淡入淡出。

我有同样的问题,但只是在 UIView 中有一个标准的 UIView。我通过将我隐藏的视图的超级视图作为 with: 参数传递来修复我的问题。我认为 re-reading 文档这是你应该如何做的,它通过传递有问题的视图来工作的事实可能只是一个方便的错误,Apple 可能已在 10.2 中修复,但这只是猜测。

无论如何,re-writing OP 的代码使用我所做的修复我的来说明:

UIView.transition(with: button.superview!, duration: 0.5,
                  options: .transitionCrossDissolve,
                  animations: { button.hidden = false },
                  completion: null)