- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有通过隐藏 UINavigationController 的导航栏进入全屏模式的代码。我想要进入全屏时流畅的动画缩放效果。我用 setNavigationBarHidden(_:animated:) .到目前为止,这一切都运行良好,即使在 iOS 11 上也是如此,但在 iPhone X 上动画效果不佳。隐藏时,没有动画,导航栏就消失了。取消隐藏时,它确实有动画,但导航栏出现的速度比导航 Controller 内容区域减少的速度慢,因此在动画期间导航栏区域显示出丑陋的黑色背景。
我可以在一个简单的测试应用程序中重新创建它。我在 UINavigationController 中嵌入了一个 UIViewController。
Storyboard
我已经尝试了所有我能想到的 Adjust Scroll View Insets 和 Extend Edges 的组合,但它们没有任何区别。
代码
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
setFullScreen(on: fullScreen, animated: animated)
}
override var prefersStatusBarHidden: Bool
{
return fullScreen
}
override var preferredStatusBarStyle: UIStatusBarStyle
{
return .lightContent
}
@IBAction func onToggleNavBarVisibility(_ sender: Any) {
if let navBarHidden = self.navigationController?.isNavigationBarHidden {
// Toggle the state
fullScreen = !navBarHidden
setFullScreen(on: fullScreen, animated: true)
}
}
private func setFullScreen(on : Bool, animated : Bool) {
self.navigationController?.setNavigationBarHidden(on, animated: animated)
self.setNeedsStatusBarAppearanceUpdate()
}
最佳答案
在您的情况下,您同时使用了 barTintColor
和 navigationBarStyle
以及 Show
Hide
动画。barTintColor 覆盖 Style 属性隐含的值您应该选择 barTintColor
或 navigationBarStyle
在下面的代码中,我刚刚使用了 barTintColor
,navigationBarStyle 是 Transulent
的默认设置。
var fullScreen = false{
didSet{
self.setNeedsStatusBarAppearanceUpdate()
}
}
override func viewDidLoad() {
super.viewDidLoad()
title = "Navigation Bar"
navigationController?.navigationBar.barTintColor = .red
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
setFullScreen(on: fullScreen, animated: animated)
}
@IBAction func onToggleNavBarVisibility(_ sender: Any) {
if let navBarHidden =
self.navigationController?.isNavigationBarHidden {
// Toggle the state
fullScreen = !navBarHidden
setFullScreen(on: fullScreen, animated: true)
}
}
private func setFullScreen(on : Bool, animated : Bool) {
self.navigationController?.setNavigationBarHidden(on, animated: animated)
self.setNeedsStatusBarAppearanceUpdate()
}
编辑:如果你想隐藏状态栏 -将 prefersStatusBarHidden
与 bool 值一起使用。 & 使用 setNeedsStatusBarAppearanceUpdate
override var prefersStatusBarHidden: Bool {
return fullScreen
}
https://developer.apple.com/documentation/uikit/uinavigationbar
关于ios - setNavigationBarHidden 动画在 iPhone X 上无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47239687/
这对你们中的一些人来说似乎是显而易见的,但我在网上找不到答案。我试图让我的导航栏仅出现在一个 View Controller 上,以便所有教程都显示我刚刚添加了此内容: override func v
我正在尝试以编程方式创建不同的 View Controller ,其中第一个不应显示导航栏,但第二个应该。我似乎无法让第二个 View Controller 显示导航栏。所有代码都可以正常编译,并且插
在我调用的 viewDidAppear 方法中 [self.navigationController setNavigationBarHidden:YES animated:YES]; 导航栏向左滑动
我想让导航栏在使用关闭按钮关闭时消失,或者在关闭屏幕时让导航栏隐藏。 代码如下: - (void)viewDidLoad { [self.navigationController setNav
我正在我的详细 View Controller 顶部添加一个 UIWebView subview ,它有一个导航栏。我想在 WebView subview 中隐藏导航栏,并在从父 View 中移除时再
我发现 setNavigationBarHidden 在 setViewControllers 之后不起作用? 这是我的代码: HomeNavController.swift: class HomeN
为了解释我的问题,我将向您展示所发生情况的屏幕截图。 之后,我将展示 Storyboard和我使用的代码。 实际上有两个问题,我认为它们是相关的。 我的应用程序 UI 如下所示: 向下滚动时,我得到以
当我使用 [[self navigationController] setNavigationBarHidden:YES animated:NO]; 另一种观点 [[self navigationCo
我正在尝试使用 GoogleMaps SDK,并且希望在移动 map 时隐藏导航栏并在停止时显示导航栏,因此: func mapView(mapView: GMSMapView, idleAtCame
Swift 动画的默认时间间隔是多少,例如 的 setNavigationBarHidden(Bool, animated: Bool) 和 setToolbarHidden(Bool, animat
[self.navigationController setNavigationBarHidden:YES/NO animated:YES] 使整个 View 向上/向下滑动。有没有人知道如何解决这个
我使用的是 MMDrawerController,除了我有 self.navigationController?.navigationBarHidden = true 的两个 View 外,它在任何地
我想在将内容滚动到顶部时显示导航栏。 我可以隐藏/显示来自 ViewController 的导航,但是当我从 UIcollectionView 类调用时“setNavigationBarHidden”
我有通过隐藏 UINavigationController 的导航栏进入全屏模式的代码。我想要进入全屏时流畅的动画缩放效果。我用 setNavigationBarHidden(_:animated:)
编程隐藏导航栏时如何捕捉动画曲线和速度?我想将其他动画与此动画同步以实现流畅的过渡:) 最佳答案 如果您查看 UINavigationController 文档,则有这一行: For animated
我有一个 View Controller ,我从一个隐藏了导航栏的 View Controller 中推送它。但我想在目标 View Controller 中显示导航栏。 我试过这个声明它没有显示导航
当我通过调用以下方式滚动时隐藏导航栏:self.navigationController?.setNavigationBarHidden(true,animated: true) 唯一的问题是导航栏没
我是一名优秀的程序员,十分优秀!