iOS 7 Nav Bar SKStoreProductViewController

Jak*_*san 6 objective-c app-store ios ios7

在iOS 6中,引入了SKStoreProductViewController以在应用程序中显示iTunes Store项目,因此用户无需离开应用程序即可查看它们.

到目前为止,我还没有找到一种方法来自定义此视图控制器的导航栏.在iOS 6中,它是带有灰色书写的黑色,而在iOS 7中,它是带有黑色书写的白色.

有没有办法改变导航栏的色调?(在iOS 6和iOS 7中)

谢谢.

Kir*_*sar 7

不是最好的解决方案,但您可以使用UINavigationBar的UIAppearance方法在显示之前设置颜色:

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

SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init];
[storeProductViewController setDelegate:self];
[self presentViewController:storeProductViewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

然后在SKStoreProductViewControllerDelegate方法中,将其更改回以前的任何内容...

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

适合我.


Bri*_*kel 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>>
Run Code Online (Sandbox Code Playgroud)

_UIRemoteView指示视图的内容在另一个进程托管.