11

問題

私のアプリは正しくレイアウトされているように見えますが、iOS 7 で有名なぼやけた半透明効果を実現できません。私のは不透明に見えます。

ここに画像の説明を入力

望ましい効果

Apple の Trailers アプリなど、より明白なぼかし効果を得ようとしています。

ここに画像の説明を入力

透明度

UINavigationController のサブクラスで、ナビゲーション バーを半透明にします。

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

ティントカラー

UIApplicationDelegate のサブクラスで、ナビゲーション バーの色合いを設定します。ティントカラーのアルファは違いがないことを発見しました。つまり、0.1 のアルファを使用しても、バーがより半透明になることはありません。

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

エッジ

コンテンツ ビュー コントローラーでは、上部がナビゲーション バーによって切り落とされUIRectEdgeNoneないように、エッジを に設定しました。デフォルトの を使用すると、ナビゲーション バーがコンテンツの上部を永久に覆い隠してしまいます。この異常と付き合っても透明効果は発動しない。UIRectEdgeAllUIRectEdgeAll

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

編集:エッジの実験

コメントで @rmaddy が指摘した広告は、edgesForExtendedLayout に問題がある可能性があります。私は包括的なチュートリアルのedgesForExtendedLayoutを見つけて、それを実装しようとしました:

- (void) viewDidLoad
{
    [super viewDidLoad];

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

それは動かなかった。まず、半透明効果はありませんでした。次に、コンテンツの上部が切り落とされました。上記のコードを使用した次のサンプル ページでは、最初はアバターがナビゲーション バーで覆われていて、スクロールするのが非常に困難でした。引き下げてアバターの上部を表示することもできますが、離すと、ページが自動的に元に戻り、アバターが再び見えなくなります。

ここに画像の説明を入力

4

2 に答える 2

5

この問題は、iOS 6 でシステム リフレッシュ コントロールが導入される前に一般的に使用されていた、サード パーティのプルダウン ツー リフレッシュ ビューEGORefreshTableHeaderViewが原因でした。

ここに画像の説明を入力

このビューは iOS 7 を混乱させ、コンテンツが実際よりも高くなっていると認識させます。iOS 6 および 7 では、条件付きでUIRefreshControlを使用するように切り替えました。これで、ナビゲーション バーによってコンテンツが切り取られることはなくなりました。を使用UIRectEdgeAllして、コンテンツをナビゲーション バーの下に移動できます。最後に、半透明効果を得るために、ナビゲーション バーのアルファを低くします。

// 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 に答える