UILabel и UIView возвращают размер (0, 0) в viewDidAppear - PullRequest
1 голос
/ 23 декабря 2011

Я занимаюсь разработкой приложения для 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).

Я уверен, что эти представления связаны с XIB, используя Interface Builder

Вы знаете, почему я получаю (0, 0)? Где я могу сделать эту инициализацию?

Ответы [ 3 ]

1 голос
/ 23 декабря 2011

Проверьте IBOutlets в Xib, и не забудьте @synthesize для всех ваших свойств.

0 голосов
/ 23 декабря 2011

Я нашел ответ.

Если я использую self.cardView, , это работает!

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

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

    return newY;
}
0 голосов
/ 23 декабря 2011

0x0 - это не размер, это адрес памяти, по которому размещается объект.и сделать в ViewDidAppear перед вызовом метода.

cardView = [[UIView alloc]init]; 

это решит проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...