gpt4 book ai didi

uinavigationbar - 自定义展开转场期间导航栏为黑色

转载 作者:行者123 更新时间:2023-12-02 00:20:37 28 4
gpt4 key购买 nike

我制作了一个自定义的 UIStoryboardSegue 但当它展开时,它似乎导致我的 UINavigationBar 变黑,然后又恢复到正确的颜色。请参阅下面的 GIF。

enter image description here

我的自定义segue只是让新的ViewController从顶部下降并返回到顶部。

这是UIStoryboardSegue代码:

import UIKit

class SlideDownSegue: UIStoryboardSegue {

var duration: Double = 0.5

override func perform() {

let screenHeight = UIScreen.main.bounds.size.height
let toVC = self.destination
let fromVC = self.source

toVC.view.transform = CGAffineTransform(translationX: 0, y: -screenHeight)
UIApplication.shared.keyWindow?.insertSubview(toVC.view, aboveSubview: fromVC.view)

UIView.animate(withDuration: duration, delay: 0, options: UIViewAnimationOptions.curveEaseInOut, animations: {
toVC.view.transform = CGAffineTransform.identity
}, completion: {
success in
fromVC.present(toVC, animated: false, completion: nil)
})
}
}

class UnwindSlideDownSegue: UIStoryboardSegue {

override func perform() {

let screenHeight = UIScreen.main.bounds.size.height
let toVC = self.destination
let fromVC = self.source.parent!

fromVC.view.superview?.insertSubview(toVC.view, at: 0)

UIView.animate(withDuration: 0.5, delay: 0, options: UIViewAnimationOptions.curveEaseInOut, animations: {
fromVC.view.transform = CGAffineTransform(translationX: 0, y: -screenHeight - 100)
}, completion: {
success in
fromVC.dismiss(animated: false, completion: nil)
})
}
}

如果我通过转到屏幕底部让展开执行默认操作,但保留显示新 View 的自定义,则 UINavigationBar 会保持其正确的颜色,这只是当我使用为展开提供的代码时,UINavigationBar 在动画过程中变黑。

任何提示将不胜感激。

---编辑---

我玩了一下,如果我进入 AppDelegate 并将 UINavigationBar.appearance().isTranslucent = false 更改为 true,我会得到白色背景,但随后看起来导航栏突然出现。我想知道是否由于某种原因被卸载,然后在 View Controller 处于事件状态后重新加载。

---编辑 2---

我可以通过 hack 来修复它。在 func application(... didFinishLaunchingWithOptions ...) 内的 AppDelegate 中,我添加了 self.window?.backgroundColor = UIColor.{your color} code> 但所做的只是使黑色部分现在显示为我的颜色,由于某种原因,导航栏在转场期间仍然消失。

最佳答案

这是使用 snapshotView(afterScreenUpdates:) 的绝佳机会。这就是 UIKit 执行许多常用转换的方式(甚至在 UINavigationController 中也是如此),并且这是执行自定义转换的绝佳方式,特别是如果您想应用效果的话。拍摄目的地的快照(它将有一个完整的导航栏),将其插入源的正下方,执行动画,关闭源以便目的地准备就绪,最后删除您甚至不会注意到的快照,因为它将准确地反射(reflect)目的地。

关于uinavigationbar - 自定义展开转场期间导航栏为黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48107222/

28 4 0