在 iOS 7 中让导航栏与状态栏重叠

Posted

技术标签:

【中文标题】在 iOS 7 中让导航栏与状态栏重叠【英文标题】:Letting the Navigationbar overlap the Statusbar in iOS 7 【发布时间】:2013-08-22 15:01:40 【问题描述】:

我想制作一个使用导航栏的应用程序,但仅用于显示标题和一些按钮(它使用 vie 容器)。我希望导航栏与状态栏“融合”,像这样

但是当我使用通用视图控制器并在其中拖动导航栏时,它看起来就像这样:

有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

我已经找到了解决这个特定问题的方法。将导航栏的 translucent 属性设置为 NO:

 self.navigationController.navigationBar.translucent = NO;

【讨论】:

【参考方案2】:

UINavigationController 将根据一组相当奇怪且未记录的约束将其 UINavigationBar 的高度更改为 44 点或 64 点。如果 UINavigationController 检测到其视图框架的顶部与其 UIWindow 的顶部在视觉上是连续的,则它会绘制高度为 64 磅的导航栏。如果其视图的顶部与 UIWindow 的顶部不连续(即使仅相差一个点),则它以“传统”方式绘制其导航栏,高度为 44 点。这个逻辑由 UINavigationController 执行,即使它是应用程序的视图控制器层次结构中的几个子级。没有办法阻止这种行为。

完整解释here.

【讨论】:

我不想使用 UINavigation 控制器,只是一个通用的视图控制器。那里也可以吗?【参考方案3】:

不确定这是否能解决您的问题,但您可以试试我的做法。

我在viewcontroller的右侧菜单“Simulated Metics”> Top Bar>“Opaque Navigation Bar”中遇到了同样的问题

【讨论】:

【参考方案4】:

在导航栏创建iboutlet中的viewcontroller.h文件

@property (weak, nonatomic) IBOutlet UINavigationBar *navBar;

你可以在viewDidLoad中做如下操作

UIView *addStatusBar = [[UIView alloc] init];

//绘制设备宽度的状态栏 addStatusBar.frame = CGRectMake(0, -20, self.view.frame.size.width, 20);

//设置状态栏的背景颜色

addStatusBar.backgroundColor = [UIColor colorWithRed:24.0/255.绿色:24/255。蓝色:24.0/255。阿尔法:1];

[self.view addSubview:addStatusBar];

// 将您的状态栏添加到您在文件 .h 中声明的 UINavigationBar *navBar [self.navBar addSubview:addStatusBar];

【讨论】:

【参考方案5】:
navigationController.navigationBar.clipsToBounds = YES;

为了使UINavigationBar 在状态栏下扩展其背景,其clipsToBounds 必须设置为NO(这是默认设置)。确保你不要拿它开玩笑。

解决方案简单如下:-

navigationController.navigationBar.clipsToBounds = NO;

【讨论】:

【参考方案6】:

斯威夫特 5

navigationController?.navigationBar.isTranslucent = false

【讨论】:

以上是关于在 iOS 7 中让导航栏与状态栏重叠的主要内容,如果未能解决你的问题,请参考以下文章

iOS11中没有状态栏的导航栏与安全区域重叠

iOS 7 状态栏与 UIImagePickerController 上的相机控件重叠

IBM Worklight - iOS 7 状态栏与应用程序的 HTML 重叠

iOS 7 状态栏与 NavigationBar 冲突

如何修复表格视图的搜索栏与状态栏重叠

Xamarin Forms - 状态栏与 IOS 中的内容重叠(safeareainsets 问题)