UILabel和UIView在viewDidAppear上返回大小(0,0)

时间:2011-12-23 10:03:35

标签: iphone ios cocoa-touch uiview

我正在开发iOS 5应用程序。我想使用其默认视图以编程方式调整UIView的大小。这个视图被命名为cardView。

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

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

...

当我向viewDidAppear内的方法发送消息时,我得到的cardView大小为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)。

我确信这些视图使用Interface Builder

与xib连接

你知道我为什么得到(0,0)吗?我在哪里可以进行初始化?

3 个答案:

答案 0 :(得分:1)

检查Xib中的IBOutlets,不要忘记所有属性的@synthesize。

答案 1 :(得分:0)

0x0不是一个大小,它是分配对象的内存地址。并在调用方法之前在ViewDidAppear中执行。

cardView = [[UIView alloc]init]; 

这将解决问题

答案 2 :(得分:0)

我找到了答案。

如果我使用self.cardView就行了!

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

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

    return newY;
}