以下のコードを使用して、UINavigationController(ビュー、ナビゲーションバーではありません)に背景画像を追加しました。ビューを埋めるように画像を拡大しようとしています。私はユーザーのデバイスと方向を知らない。 (注:背景画像が変わる可能性があるため、デバイスやオリエンテーションに固有のサイズや解像度を作成したくない)。iOSナビゲーションビューの背景画像UIViewContentModeScaleAspectFill not working
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"%@", NSStringFromCGRect(self.navigationController.view.frame));
// Set background image
NSString *filename = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"assets/images/wallpaper.jpg"];
self.background = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:filename]];
self.background.contentMode = UIViewContentModeScaleAspectFill;
self.background.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
self.background.center = CGPointMake(CGRectGetMidX(self.navigationController.view.frame), CGRectGetMidY(self.navigationController.view.frame));
[self.navigationController.view insertSubview:self.background atIndex:0];
}
UIViewContentModeScaleAspectFill及びUIViewAutoresizingFlexibleHeight /幅に関係なく、画面サイズと向きの画面いっぱいに画像スケールを作ることになっています。しかし、私はシミュレータに関する問題について助けが必要です。iOSは、シミュレータがポートレート/ランドスケープモードで起動されているかどうかによって動作が異なります。
以下の画像は、アプリをポートレートモードで起動してから、横向きに回転させるとどうなるかを示しています。肖像画では、画像はビューを満たすように拡大/縮小されません(画像の上下に黒いバーがあります)。ランドスケープでは、画像はビューを満たすために正しくスケーリングされます。
下の画像は、アプリは風景の中に開始し、その後、肖像画に回転させたときに何が起こるかを示しています。ランドスケープでは、画像はビューを満たすように拡大/縮小されません(画像の両側に黒いバーがあります)。ポートレートでは、画像はビューを満たすように正しくスケーリングされます。
なぜiOSが処理しているこれら二つのシナリオの異なった、なぜ画像がビューを埋めるために、正しくスケーリングされていないとどのように私はUIViewContentModeScaleAspectFillが正常に動作するのですか?
あなたは 'UIImageView'の最初の' frame'を設定していません。 'self.background.frame = self.navigationController.view.bounds; 'のようなものを試してみてください。 –
viewDidLayoutSubviewsメソッドで設定されたフレームを忘れないでください。 –
トムは、そのトリックをしました。私は手動でフレームを設定する必要はないと仮定しました。これは、insertSubview:self.background中に自動的に発生するはずです。 – cridgit