2013-09-01 2 views
2

У меня возникла странная проблема, когда дело доходит до добавления содержимого в UIScrollView.Очень странный вопрос о позиции UIView

Ниже приведены результаты по тому же методу, который вызывается. Тот, что слева, является результатом вызова из viewDidLoad. Один из них вызывается из пользовательского метода, который срабатывает при касании метки.

enter image description here

код довольно прямо вперед:

CGRect scrollRect = CGRectMake(0, 64, 320, [[UIScreen mainScreen] bounds].size.height - 49); 
    _containerView = [[UIScrollView alloc] initWithFrame:scrollRect]; 
    _containerView.backgroundColor = [UIColor clearColor]; 

    UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, 300, 40)]; 
    myLabel.text = @"my label"; 
    myLabel.textColor = [super colorFromHexString:0x472C37]; 
    myLabel.numberOfLines = 0; 
    [myLabel sizeToFit]; 
    y_offset += myLabel.frame.size.height; 
    [_containerView addSubview:myLabel]; 
    [self.view addSubView:_containerView]; 

Я проверил родитель (self.view) и его координаты всегда 0,0. Неудивительно, что это ...

+0

Скорее всего, это результат неопределенных ограничений макета. –

+2

Работает этот код в 'viewWillAppear:' или 'viewDidLayoutSubviews'? –

+0

@ DavidH Nope, не используя автомат. – Ger

ответ

2

В viewDidLoad ваши компоненты субспектов еще не полностью инициализированы, поэтому, если вы используете фрейм некоторых из них, вы получите нежелательный результат. viewDidLayoutSubviews - это, вероятно, то, что вы ищете. Это метод, при котором все кадры subviews полностью инициализируются.

Попробуйте вызвать свой код внутри этого метода, и вы должны получить тот же результат, что и при нажатии кнопки.

-(void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    [self setupView]; 
} 
Смежные вопросы