像在 iOS 7 日历应用中一样设置 UINavigationBar 高度

Posted

技术标签:

【中文标题】像在 iOS 7 日历应用中一样设置 UINavigationBar 高度【英文标题】:Set UINavigationBar height like in iOS 7 calendar app 【发布时间】:2013-09-20 20:44:14 【问题描述】:

我需要一个类似于 ios 7 日历中的 NavigationBar。

我注意到 NavigationBar 后面没有任何模糊。

从一个详细视图返回时。只是“正常”的“主要”NavigationBar

有人知道怎么做吗?

我已经尝试过这样做:

[self.navigationController.navigationBar setFrame:CGRectMake(0, 0, 320, 88)];

但这会将标题和按钮向下移动 44 像素。

我有另一个想法在navigationController.navigationBar 下添加另一个导航栏,但是我在第一个导航栏下有一行。有谁知道怎么去掉这个?

谢谢!

【问题讨论】:

【参考方案1】:

我修好了!

我在“主”导航栏下放置了另一个导航栏。删除了“主要”导航栏阴影线。

移除 NavigationBar 半透明并将背景颜色设置为 97% 白色。 (这是标准的)。如果 translucent 为 YES,那么当内容落后时会看起来很奇怪。

[self.navigationController.navigationBar setTranslucent:NO];
[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithWhite:0.97 alpha:1]];
[NavigationBarExtension setTranslucent:NO];
[NavigationBarExtension setBarTintColor:[UIColor colorWithWhite:0.97 alpha:1]];

删除该行的代码(在 viewWillAppear 中执行此操作:因为如果您推送其他视图控制器,该行必须返回)

- (void)viewWillAppear:(BOOL)animated 
    for (UIView *view in self.navigationController.navigationBar.subviews) 
        if ([view isKindOfClass:NSClassFromString(@"_UINavigationBarBackground")]) 
            for (UIView *view2 in view.subviews) 
                if ([view2 isKindOfClass:[UIImageView class]] && view2.frame.size.height < 1) 
                    [view2 setHidden:YES];
                    break;
                
            
        
    

推送其他视图控制器时显示该行的代码:

- (void)viewWillAppear:(BOOL)animated 
    for (UIView *view in self.navigationController.navigationBar.subviews) 
        if ([view isKindOfClass:NSClassFromString(@"_UINavigationBarBackground")]) 
            for (UIView *view2 in view.subviews) 
                if ([view2 isKindOfClass:[UIImageView class]] && view2.frame.size.height < 1) 
                    [view2 setHidden:NO];
                    break;
                
            
        
    

【讨论】:

你把这个放到应用商店了吗?您正在访问私人课程。还有其他一些方法可以做到这一点。您可以创建自定义导航栏并调整 sizeToFit 中的高度以及通过将索引 0 处的栏的子视图设置为 alpha 0 来隐藏栏的背景(可能不是最安全的,但它可以满足您的需求)。您需要嵌入另一个栏的原因是,当您调整它的大小时,Apple 已将项目绑定到栏的底部,您现在必须将所有项目设置代理到具有隐藏背景的新内部栏。 我现在没有任何项目使用它。如果我使用此 API 发布应用程序,我会通知您。 @GustafR 您是否使用上述代码发布了应用程序?苹果批准了吗? :-) @KasunRandika 抱歉,我从未发布过该应用,所以我不知道。 Apple 批准了我的应用程序,该应用程序在两个不同的地方使用了这个 hack。但不幸的是,这个小技巧不再适用于 iOS 11。是时候找到一种不同的方法来解决这个问题了。

以上是关于像在 iOS 7 日历应用中一样设置 UINavigationBar 高度的主要内容,如果未能解决你的问题,请参考以下文章

更改日历隐私时 iOS 7 应用程序崩溃

iOS 实时位置跟踪器就像在 uber 中一样?

用于公共应用商店发布的 iOS AirPlay 操作表 - 就像在 Spotify 中一样

如何像在 Facebook 应用程序中一样以编程方式打开设置?

如何使应用程序图标像 iOS 内置时钟和日历图标一样响应

如何像在 iOS 中一样在 WP8 中使用 Prefix.pch?