像iOS 7日历应用程序一样设置UINavigationBar高度

21

我需要一个像iOS 7日历中的NavigationBar一样的导航栏。

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

Calendar app iOS7

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

Calendar app iOS7

有人知道如何做到这一点吗?

我已经尝试过:

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

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

我有另一个想法,即在navigationController.navigationBar下添加另一个导航栏,但是这样第一个导航栏下面会有一条线。 有人知道如何去除它吗?

谢谢!

1个回答

5

我解决了它!

我在“主”NavigationBar下方放置了另一个NavigationBar。删除了“主”NavigationBar的阴影线。

取消NavigationBar的半透明效果,并将背景颜色设置为97%白色。(这是标准的)如果半透明为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;
                }
            }
        }
    }
}

6
你把这个放到应用商店了吗?你正在访问私有类。还有其他几种方法可以实现这一点。你可以创建一个自定义导航栏并在sizeToFit中调整高度,也可以通过将索引为0的子视图设置为alpha 0来隐藏导航栏的背景(可能不是最安全的方法,但它可以达到你想要的效果)。你需要嵌入另一条栏目的原因是,苹果公司已将项目绑定到栏目底部,并且当你调整大小时,你现在必须将所有项目设置代理到具有隐藏背景的新内部栏目。 - cynistersix
我目前没有使用这个API的任何项目。如果我发布了一个使用这个API的应用程序,我会通知你的。 - Gustaf Rosenblad
@GustafR,你用上述代码发布了应用程序吗?苹果公司是否已经批准了它? :-) - Randika Vishman
@KasunRandika 抱歉,我从未发布过该应用程序,所以我不知道。 - Gustaf Rosenblad
苹果公司批准了我使用这个技巧的应用程序,而且在两个不同的地方都使用了它。但不幸的是,这个小技巧在iOS 11中已经不再起作用了。现在是时候找到另一种方法来完成这个任务了。 - Daniel

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