11

问题

我的应用程序似乎布局正确,但我无法实现 iOS 7 著名的模糊半透明效果。我的看起来不透明。

在此处输入图像描述

所需效果

我正在尝试获得更明显的模糊效果,例如 Apple 的 Trailers 应用程序:

在此处输入图像描述

半透明

在我的 UINavigationController 子类中,我将导航栏设置为半透明:

- (id)initWithRootViewController:(UIViewController *)rootViewController
{
    if (self = [super initWithRootViewController:rootViewController]) {
        self.navigationBar.translucent = YES;
    }
    return self;
}

色调颜色

在我的 UIApplicationDelegate 子类中,我设置了导航栏的色调。我发现色调颜色的 alpha 没有任何区别。也就是说,使用 0.1 的 alpha 不会导致条变得更加半透明。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
    [[UINavigationBar appearance] setTintColor:[UIColor greenColor]];
}

边缘

在我的内容视图控制器中,我将边缘设置为,UIRectEdgeNone这样顶部就不会被导航栏截断。如果我使用 default UIRectEdgeAll,导航栏将永久覆盖我的内容顶部。就算我忍受着这种异常,UIRectEdgeAll依然无法启用半透明效果。

- (void) viewDidLoad
{
    [super viewDidLoad];
    self.edgesForExtendedLayout = UIRectEdgeNone;
}

编辑:试验边缘

@rmaddy 在评论中指出的广告,问题可能出在 edgeForExtendedLayout 上。我找到了一个综合教程 edgeForExtendedLayout并尝试实现它:

- (void) viewDidLoad
{
    [super viewDidLoad];

    self.edgesForExtendedLayout = UIRectEdgeAll;
    self.automaticallyAdjustsScrollViewInsets = YES;
    self.extendedLayoutIncludesOpaqueBars = NO;
}

那没起效。首先,没有半透明效果。其次,我的内容的顶部被砍掉了。在以下带有上述代码的示例页面中,头像最初被导航栏覆盖,很难滚动到。你可以拉下来看到头像的顶部,但是当你松开时,页面会自动弹回来,头像会再次被遮挡。

在此处输入图像描述

4

2 回答 2

5

该问题是由第三方下拉刷新视图EGORefreshTableHeaderView 引起的,该视图在 iOS 6 引入系统刷新控件之前就已普遍使用。

在此处输入图像描述

这个视图混淆了 iOS 7,使它认为内容比实际高。对于 iOS 6 和 7,我有条件地切换到使用UIRefreshControl。现在导航栏不会截断我的内容。我可以UIRectEdgeAll用来使我的内容位于导航栏下方。最后,我用较低的 alpha 为导航栏着色以获得半透明效果。

// mostly redundant calls, because they're all default
self.edgesForExtendedLayout = UIRectEdgeAll;
self.automaticallyAdjustsScrollViewInsets = YES;
self.extendedLayoutIncludesOpaqueBars = NO;

[[UINavigationBar appearance] setTintColor:[UIColor colorWithWhite:0.0 alpha:0.5]];
于 2013-11-15T00:16:04.863 回答
0

如果您需要达到与 iTunes Store 中完全相同的效果(Dark Blur)。

配置barStyle导航栏的属性如下:

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
于 2014-04-29T16:43:20.417 回答