防止 UINavigationItem 的 TitleView 闪烁

Posted

技术标签:

【中文标题】防止 UINavigationItem 的 TitleView 闪烁【英文标题】:Prevent UINavigationItem's TitleView from blinking 【发布时间】:2018-02-12 20:03:34 【问题描述】:

我正在使用 UINavigationItems titleView 属性在我的 ViewController 的 UINavigationBar 的中心设置视图。问题是,当我用相同的titleView 推送另一个 ViewController 时,它会闪烁。

这是我在 ViewControllers 中设置 titleView 的方法

let view = UIView(frame: CGRect(x: 0, y: 0, width: 40, height: 40))
view.backgroundColor = .red
self.navigationItem.titleView = view

我能做些什么来防止这种情况发生?

【问题讨论】:

如果你设置self.navigationController?.navigationItemtitleView而不是self.navigationItem呢? 你在哪里执行上面的代码?视图加载? viewDidAppear? 您可以在viewWillAppear 方法中设置titleView,该方法将在视图完全加载之前设置redView,但它仍不会保留在之前的ViewController 中,因为有一个根据 UINavigation 中的 pushpop 在每个 viewControllers 之间从左到右或从右到左进行动画转换。 @karnett 我在两个 ViewController 的父级 UIViewConrtroller 内的 viewDidLoad 中执行它。 @Matt.kaaj 我不能禁用过渡动画吗? 【参考方案1】:

我最终使用自定义视图并将其作为子视图添加到UINavigationBar。我还将 UINavigationItems titleView 设置为空白视图,以防止 LargeTitle 出现在我的视图中。

【讨论】:

以上是关于防止 UINavigationItem 的 TitleView 闪烁的主要内容,如果未能解决你的问题,请参考以下文章

如何防止自定义导航栏拉伸?

UINavigationItem:检测触摸

如何更改 UINavigationItem 字体?

ChildviewController 的 UINavigationItem

如何更改 UINavigationItem 的背景颜色?

UINavigationItem 中的搜索栏