iOS 7中允许导航栏覆盖状态栏

4
我想制作一个应用程序,其中使用导航栏,但仅用于显示标题和一些按钮(它正在使用视图容器)。我希望导航栏与状态栏“融合”在一起,就像这样: Navigation Bar and Status Bar 但是当我使用通用视图控制器并拖动导航栏时,它看起来只是这样: Without 有没有办法实现这个效果?
6个回答

3
我已经找到了针对这个特定问题的解决方案。将导航栏的半透明属性设置为NO即可:
 self.navigationController.navigationBar.translucent = NO;

1

UINavigationController会根据一组奇怪而未记录的约束条件,将其UINavigationBar的高度更改为44点或64点。如果UINavigationController检测到其视图框架的顶部与其UIWindow的顶部在视觉上是连续的,则使用64点的高度绘制其导航栏。如果其视图的顶部与UIWindow的顶部不相邻(即使只差一个点),则以传统方式使用44点的高度绘制其导航栏。即使UINavigationController在应用程序的视图控制器层次结构中有多个子级,也会执行此逻辑。无法阻止此行为。

完整解释在此处


我不想使用UINavigation Controller,只想使用通用的view controller。在那里也可以做到吗? - Miterion

0
navigationController.navigationBar.clipsToBounds = YES;

为了让 UINavigationBar 在状态栏下面延伸背景,它的 clipsToBounds 必须设置为 NO(默认值)。确保不要随意更改它。
解决方法如下:
navigationController.navigationBar.clipsToBounds = NO;

0

Swift 5

navigationController?.navigationBar.isTranslucent = false

0

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

我在视图控制器的右侧菜单“模拟指标”> 顶部栏 > “不透明导航栏”中遇到了同样的问题。


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

    @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. green:24/255. blue:24.0/255. alpha:1];

    [self.view addSubview:addStatusBar];

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接