0

現在、.xib ファイルに配置された UIImageView で表される HP ゲージを使用してゲームをプログラムしようとしています。IBOutlet を次のように宣言しました。

@property (weak, nonatomic) IBOutlet UIImageView *hpGaugeView;

それに応じて合成されます。また、xib の UIImageView インスタンスにもリンクされています。

xib では、hpGaugeView の長さを 188 に、高さを 9 に設定しました。

これがviewDidLoadで行ったことです:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    [hpGaugeView setFrame:CGRectMake(49, 18, 123, 9)];
    NSLog(@"%f, %f", [hpGaugeView frame].size.width, [hpGaugeView frame].size.height);
}

NSLog は hpGaugeView の幅が 123 であることを教えてくれますが、実行すると、xib のものと比べて長さが変化していないように見えます。他のすべての setFrame: または setBound: は他の viewController で正常に機能したので、ここで何が起こっているのか疑問に思っています。

それは数時間続けて私を悩ませている、小さいながらも重大な問題です...

編集: AutoLayout をオフにすると、サイズ変更が機能しました。しかし、それは他の多くの問題を引き起こします...

4

4 に答える 4

3

autolayout をオンにすると、サブビューは viewDidLoad 中に配置されません。制約は少し後で計算され、viewDidLayoutSubviewsメソッドをオーバーライドしてフレームを設定できます。

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    // Do any additional setup after subviews are laid.
    [hpGaugeView setFrame:CGRectMake(49, 18, 123, 9)];
    NSLog(@"%f, %f", [hpGaugeView frame].size.width, [hpGaugeView frame].size.height);
}

クラスリファレンスから:

viewDidLayoutSubviews

ビューがサブビューをレイアウトしたばかりであることをView Controllerに通知します。

于 2013-06-06T02:22:51.463 に答える