2011-12-23 10 views
1

私はiOS 5アプリケーションを開発しています。私は、デフォルトビューを使用して、プログラムによってUIViewのサイズを変更したいと思います。これはcardViewという名前のビューです。UILabelとUIViewがviewDidAppearでサイズ(0、0)を返します

@interface ThreeCardsViewController : UIViewController 
{ 
    ... 
    IBOutlet UIView* cardView; 
    ... 
} 

@property (nonatomic, retain) IBOutlet UIView* cardView; 

... 

viewDidAppear内のメソッドにメッセージを送信すると、そのカードのサイズは0x0になります。

@implementation ThreeCardsViewController 

... 
@synthesize cardView; 
... 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self setUpViews]; 
} 

- (void) setUpViews 
{ 
    ... 

    futureCardState.cardViewY = 
        [self computeDescriptionViewPosWith:futureCardState.cardViewSize]; 
    ... 

    [self showCard:pastCardState]; 
} 

- (CGFloat) computeDescriptionViewPosWith:(CGSize)newDescriptionViewSize 
{ 
    CGFloat newY; 

    newY = cardView.frame.size.height - newDescriptionViewSize.height; 

    return newY; 
} 

すべてのビューまたはuilabelsのサイズは(0、0)です。

私はこの見解は、私が(0、0)を取得していますなぜあなたは知っていますInterface Builderの

を使用して、XIBに接続されていると確信していますか?この初期化はどこで行えますか?

+0

「setUpView」のコードを表示します。また、必ず 'super'の' viewDidAppear: 'を呼び出すようにしてください。 – mattjgalloway

+1

あなたはcardViewを合成していますか? – Maulik

+0

新しい内容で質問を更新しました。 @mattjgalloway、[super viewDidAppear:...]を追加しましたが、まだ動作しません。 – VansFannel

答えて

0

を解決します。

self.cardViewを使用すると、が動作します。

- (CGFloat) computeDescriptionViewPosWith:(CGSize)newDescriptionViewSize 
{ 
    CGFloat newY; 

    newY = self.cardView.frame.size.height - newDescriptionViewSize.height; 

    return newY; 
} 
1

XibでIBOutletsをチェックし、すべてのプロパティで@synthesizeを忘れないでください。

+0

XibのすべてのIBOutletが正しいですし、すべてのプロパティが@synthesizeです。 – VansFannel

0

0x0はサイズではありませんオブジェクトが割り当てられているメモリアドレスです。メソッドを呼び出す前にViewDidAppearで行います。

cardView = [[UIView alloc]init]; 

これは、私は答えを見つけた問題

+0

cardViewが割り当てられていない場合は、例外が発生します。そして、申し訳ありませんが、それは私のせいでした。私はサイズに間違ったフォーマットを使用しました。 – VansFannel

関連する問題