2

viewDidLayoutSubviews でフレームを変更するという通常の回答が機能しないので、私のコードに間違いが見つからない限り、私は尋ねています。フレームは正しい幅と高さに設定されますが、iOS 7 はフレームを尊重しません。

現在、かなり前にリリースされたアプリは次のようになり、iOS 6 および 7 で動作します: https://itunes.apple.com/se/app/eksjo/id435475192?mt=8

再コンパイルすると次のようになります: https://www.dropbox.com/s/pzyv2vhtlmlxkoe/Photo%202013-12-11%2009%2047%2030.png

-(void)viewWillAppear:(BOOL)animated {
    UIImageView *iv=[[UIImageView alloc] initWithFrame:r(320-102/2,0,102,44)];
    iv.image=[UIImage imageNamed:@"Eksjologo5bar.png"];
    self.navigationItem.titleView=iv;
    [iv release];
}

-(void)viewDidLayoutSubviews {
    CGRect frame=self.navigationItem.titleView.frame;
    frame.size.width=102;
    frame.size.height=44;
    self.navigationItem.titleView.frame=frame;
}

やりたいことは、ナビゲーション バーの中央にロゴ イメージを配置することだけです。これを行い、iOS 6.x との互換性を維持するために、viewWillAppear コードの最小限のコード変更を探しています。

編集: iOS 7 の問題ではなく、iOS 6 の問題である可能性もあります。なぜそれがこの質問のように行われるべきなのかを説明できれば、それは私の質問への答えです: My UINavigationitem's TitleView Getting Expanded in ios 6

4

1 に答える 1

12

これが私がすることです

 UIImageView *logoImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, desired_image_width, desired_image_height)];
 // if you need to resize the image to fit the UIImageView frame
 logoImage.contentMode = UIViewContentModeScaleAspectFit;
 // no extension name needed for image_name
 [logoImage setImage:[UIImage imageNamed:@"image_name"]];
 UIView *logoView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, logoImage.frame.size.width, logoImage.frame.size.height)];
 [logoView addSubview:logoImage];
 self.navigationItem.titleView = logoView;

navigationItem の titleView を設定する前に、UIImageView インスタンスを UIView インスタンスに追加していることに気付くかもしれません。UIImageView インスタンスを navigationItem の titleView に直接設定することもできますが、次のページに移動するとロゴが中心からずれてしまい、戻るボタンでロゴを表示したい場合があります。ナビゲーション バーは自動的に UIView を中央に配置しますが、UIImageView (UIImageView は UIView のサブクラスですが、理由はわかりません)。

于 2014-02-21T19:43:02.257 に答える