3

ユーザーの背景静的UIImageView(Nibファイルから)のサイズを調整しようとしていiPhone5ます。残念ながら、次のコードは背景ビューのサイズに何の違いもないようです。

誰かが理由を知っていますか?ご協力いただきありがとうございます。

ViewController.m:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    device = appDelegate.deviceType;
    NSLog(@"The device platform is: %@", device);
    if ([[device substringToIndex:8] caseInsensitiveCompare: @"iPhone 5"] == NSOrderedSame) {
        [background sizeThatFits:CGSizeMake(320, 504)];
    }
    else {
        [background sizeThatFits:CGSizeMake(320, 416)];
    }
...
//Note: 'background' is declared in `ViewController.h` as, `IBOutlet` `UIImageView` *background, and is linked to the image view in ViewController_iPhone.xib 
4

3 に答える 3

4

いくつかの考え:

  1. demosten と shabzco が示唆したように、座標を決定するためにデバイス名/説明を使用しません (他に何もなければ、iPhone 6 などはどうでしょう)。

  2. プログラムで設定する場合は、画像ビューのサイズをハードコーディングするのではなく、View Controller のビューに基づいてプロパティをframe設定することをお勧めします。このようにして、デバイスに関係なく、そのビュー コントローラーが後で別のコンテナー コントローラーなどの子ビュー コントローラーとして埋め込まれているかどうかに関係なく、背景がビュー コントローラーのビューの適切なサイズに調整されます。 (たとえば、ビューをナビゲーション コントローラーとタブ バー コントローラー、独自のカスタム コンテナー コントローラーなどに配置するとどうなるでしょうか)。また、ステータス バーやその他のグラフィック要素のサイズを推測しないでください。iOS がこれらすべてを簡単に理解できるようにします。background.framebounds

    background.frame = self.view.bounds;
    
  3. または、背景画像ビューを NIB 自体に追加した場合は、自動サイズ調整マスクを設定し、frameプログラムでまったく変更しないでください。自動レイアウトをオフにしている場合は、画像ビューの自動サイズ変更プロパティを次のように設定するだけです:

    自動サイズ変更

結論として、可能であれば、コード内で明示的なデバイス名の参照を避け、ハードコーディングされた座標を避けてください。コードに次元をハードコードすると、アプリが壊れやすくなり、新しいデバイス、新しいバージョンの iOS、ビュー コントローラーを追加のコンテナー コントローラーに埋め込むなどの問題が発生しやすくなり、コードの再利用の機会が制限されます。

于 2013-01-02T02:30:04.467 に答える
2

これは、iPhone 5 と以前のサイズのデバイスを確認するためのより良い方法です。

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        [background sizeThatFits:CGSizeMake(320, 416)];
    }
    if(result.height == 568)
    {
        [background sizeThatFits:CGSizeMake(320, 504)];
    }
}
于 2013-01-02T02:09:50.943 に答える
1

sizeThatFitsサイズは変わりません。変更する必要がありbackground.frameます。何かのようなもの:

background.frame = CGRectMake(background.frame.origin.x, background.frame.origin.y, 320, 416);

background.frame = CGRectMake(background.frame.origin.x, background.frame.origin.y, 320, 504);

また、Nib ファイルの編集中に、サイズ インスペクタ タブで UIImageView の幅または高さが柔軟でないことを確認してください。

于 2013-01-02T02:19:00.597 に答える