6

iOS 6 では、SKStoreProductViewController が導入され、アプリで iTunes Store アイテムを表示できるようになったため、ユーザーはそれらを表示するためにアプリを離れる必要がなくなりました。

これまでのところ、このビュー コントローラーのナビゲーション バーをカスタマイズする方法は見つかりませんでした。iOS 6 では黒でグレーの文字、iOS 7 では白で黒の文字です。

ナビゲーション バーの色合いを変更する方法はありますか? (iOS 6 & iOS 7)

ありがとう。

4

5 に答える 5

7

最も良い解決策ではありませんが、UINavigationBar の UIAppearance メソッドを使用して、表示する直前に色を設定できます。

[[UINavigationBar appearance] setTintColor:[UIColor darkGrayColor]];

SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init];
[storeProductViewController setDelegate:self];
[self presentViewController:storeProductViewController animated:YES completion:nil];

そして、SKStoreProductViewControllerDelegate メソッドで、以前のものに戻します...

-(void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
    [viewController dismissViewControllerAnimated:YES completion:nil];
}

私のために働きます。

于 2013-09-24T16:56:50.150 に答える
5

残念だけど違う。 SKStoreProductViewControllerこれは、そのビューが別のプロセスによって完全に所有されており、プログラムからアクセスできないことを意味します

これは、コントローラーのビューの再帰的な説明を見ることで確認できます。

<UIView: 0x8d48da0; frame = (0 0; 320 480); layer = <CALayer: 0x8d48d70>>
   | <_UISizeTrackingView: 0x9b53700; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x9b53770>>
   |    | <_UIRemoteView: 0x9b51d70; frame = (0 0; 320 480); transform = [0.5, -0, 0, 0.5, -0, 0]; userInteractionEnabled = NO; layer = <CALayerHost: 0x9b55ae0>>

_UIRemoteView、ビューのコンテンツが別のプロセスでホストされていることを示します。

于 2013-09-17T01:12:45.573 に答える
1

バーの色をカスタマイズすることはできませんが、デフォルトの色は問題なく表示されます。UIAppearance 設定がテキストの色を変更していることがわかりました。

バーのテキストの色をデフォルトに設定し、閉じるときに UIAppearance 設定を復元する SKStoreProductViewController サブクラスを次に示します。コード内の複数の場所から表示する場合に便利です。

@interface GBStoreProductViewController ()
{
    UIColor *navBarTintColor;
    NSDictionary *navBarTitleTextAttributes;
}

@end

@implementation GBStoreProductViewController

- (id)init
{
    UIColor *tintColor = [[UINavigationBar appearance] tintColor];
    NSDictionary *titleTextAttributes = [[UINavigationBar appearance] titleTextAttributes];
    [[UINavigationBar appearance] setTintColor:nil];
    [[UINavigationBar appearance] setTitleTextAttributes:nil];
    if (self = [super init]) {
        navBarTintColor = tintColor;
        navBarTitleTextAttributes = titleTextAttributes;
    }
    return self;
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [[UINavigationBar appearance] setTintColor:navBarTintColor];
    [[UINavigationBar appearance] setTitleTextAttributes:navBarTitleTextAttributes];
}

@end

この技術については、Kiran Panesar の功績によるものです。

于 2013-12-10T20:07:35.547 に答える
1

私もこの問題を抱えていましたが、コードに対して与えられた答えがうまくいきappearanceませんでした。以前にアプリ全体window.tintColorを変更したため、これが修正されたことがわかりました。appDelegate

[[UIApplication sharedApplication] keyWindow].tintColor = nil;
于 2017-11-10T00:26:46.967 に答える