0

iPhone 5 (4 インチ ディスプレイ) の場合、uiLabel を下に移動しようとしています。

-(void) viewDidLoad {
    if(CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136))) {
        CGRect frame = [self.timeOnCurrentQuestion frame];
        frame.origin.y += 40;  // change the location
        [self.timeOnCurrentQuestion setFrame:frame];
        nslog(@"This DOES get logged");
    }
}
4

3 に答える 3

1

Jonah、viewWillAppear メソッドでコードを試しましたか? おそらく、それはあなたの問題を整理します。

于 2012-11-29T04:33:34.213 に答える
0

多分それはあなたが注意する必要があるものです。

- (void)viewDidLoad 

コントローラーjuzがそのビューを作成したときにメソッドです。

たとえば、おそらく init メソッドで、次のようなものを呼び出します。

[self.view setBackground:[UIColor redColor]];
self.timeOnCurrentQuestion = [[UIView alloc] initWithFrame:kFrame];

この場合、ワークフローは次のようになります。

[self.view setBackground:[UIColor redColor]];
[self viewDidload];
self.timeOnCurrentQuestion = [[UIView alloc] initWithFrame:kFrame];

このワークフローの理由は、self.view が呼び出され、そのビューが通常のビュー サイクルの前に必要になるためです。この場合、self.timeOnCurrentQuestion は viewDidload メソッドでまだ nil です。

私の練習が最善かどうかはわかりません。

コントローラーの init メソッドで常に subView を初期化します。[self viewDidload] で [self.view addSubview:_subview] (//self.view を必要とするすべてのメソッド呼び出し) を実行します。

于 2012-11-29T03:04:09.777 に答える
0

viewDidAppear は私のために働いた。どうやらライフサイクルは

  1. LoadView()
  2. viewDidLoad()
  3. viewWillAppear()
  4. viewDidAppear()
于 2014-05-19T14:44:18.323 に答える