問題
私のアプリは正しくレイアウトされているように見えますが、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
ないように、エッジを に設定しました。デフォルトの を使用すると、ナビゲーション バーがコンテンツの上部を永久に覆い隠してしまいます。この異常と付き合っても透明効果は発動しない。UIRectEdgeAll
UIRectEdgeAll
- (void) viewDidLoad
{
[super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeNone;
}
編集:エッジの実験
コメントで @rmaddy が指摘した広告は、edgesForExtendedLayout に問題がある可能性があります。私は包括的なチュートリアルのedgesForExtendedLayoutを見つけて、それを実装しようとしました:
- (void) viewDidLoad
{
[super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeAll;
self.automaticallyAdjustsScrollViewInsets = YES;
self.extendedLayoutIncludesOpaqueBars = NO;
}
それは動かなかった。まず、半透明効果はありませんでした。次に、コンテンツの上部が切り落とされました。上記のコードを使用した次のサンプル ページでは、最初はアバターがナビゲーション バーで覆われていて、スクロールするのが非常に困難でした。引き下げてアバターの上部を表示することもできますが、離すと、ページが自動的に元に戻り、アバターが再び見えなくなります。