隐藏状态栏时,我的导航栏在 iOS7 中向上移动
Posted
技术标签:
【中文标题】隐藏状态栏时,我的导航栏在 iOS7 中向上移动【英文标题】:When hiding the statusbar my navigation bar moves up in iOS7 【发布时间】:2013-10-08 20:59:19 【问题描述】:我试图隐藏状态栏但保持“更大”的导航栏高度。现在,当我通过将- (BOOL)prefersStatusBarHidden
设置为YES
然后调用[self setNeedsStatusBarAppearanceUpdate];
来隐藏状态栏时。这样做的问题是导航栏会向上滑动并且不会为我要显示的通知留出空间。简单地在状态栏上添加一个视图不是一种选择,我们的状态栏/导航具有花哨的模糊效果。有谁知道如何使用状态栏高度保持标准导航栏高度并从中删除状态栏?
编辑;我最终做的是冒险并通过私有 API 获取状态栏的 UIWindow 并抵消它。
编辑 2;应用程序通过私有 API 获得批准。不过要小心!
【问题讨论】:
UINavigationBar
是 UIView
的子类。将其框架设置为您想要的任何内容。如果您使用的是设置其框架的UINavigationController
,请将其子类化并覆盖viewWillLayoutSubviews
。
全面调查:***.com/questions/21929220/…
查看此参考链接customize-navigation-status-bar-ios-7
一些屏幕截图可以帮助您了解什么,更重要的是为什么要这样做。
你能发一张快照吗?
【参考方案1】:
您可以创建一个自定义 UIView,其框架为
customView.frame=CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height);
还可以按照以下步骤隐藏您的状态栏
转到 info.plist 并添加两个属性(如果不存在)。将“状态栏最初隐藏”设置为YES
并将UIViewControllerBasedStatusBarAppearance
设置为NO
。这将隐藏您应用的状态栏。
【讨论】:
customView 高度应该是self.view.frame.size.height - 20
:)
赏金是自动授予的,但答案大多是正确的。我通过手动添加到我的视图中的替换 UINavigationView
类解决了我的问题,而我的控制器的真正导航栏保持隐藏状态。虽然我确实使用基于视图控制器的状态栏外观 plist 项并覆盖 prefersStatusBarHidden
【参考方案2】:
在您的视图控制器中添加此代码:
if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
self.edgesForExtendedLayout = UIRectEdgeNone;
【讨论】:
这并不能解决问题,因为我不想丢失扩展布局。【参考方案3】:你应该使用positionForBar:
method of UIBarPositioningDelegate Protocol.
我不想提供其他答案或复制/过去,因此您应该仔细查看以下问题\答案。 :)
iOS 7 Status Bar Collides With NavigationBariOS 7 UIToolBar Overriding With Status Barstatusbar overlapping content in iOS7
【讨论】:
你好,我正在使用 TLYShyNavBar 和 carbonkit 来隐藏类似 youtube 主页的导航栏,你对此有什么想法吗?【参考方案4】:我必须这样做一次。我最终创建了自己的自定义导航栏,然后将框架设置为:
navBar.frame=CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height);
当时它对我有用。试试看吧。
【讨论】:
【参考方案5】:这里的另一种解决方法:子类UINavigationController
覆盖方法:
- (void)viewWillLayoutSubviews
[super viewWillLayoutSubviews];
if (self.navigationBar.frameMinY < 1)
self.navigationBar.frameHeight = 64;
else
self.navigationBar.frameHeight = 44;
其中设置frameMinY
设置frame.origin.y
和设置frameHeight
设置frame.size.height
【讨论】:
这个方法在ios11上坏了以上是关于隐藏状态栏时,我的导航栏在 iOS7 中向上移动的主要内容,如果未能解决你的问题,请参考以下文章