2016-02-25 3 views
1

У меня есть вложенный UIStackView, который, когда я нажимаю кнопку, создается. Чтобы перейти к более подробным сведениям, у меня есть UIStackView, который выполняет итерацию через NSMutableArrayList, полный CustomUIStackViews, и добавляет их в asposedSubviews. Когда инициалы CustomUIStackViews запускаются, они также выполняют итерацию через свой собственный NSMutableArrayList, заполненный UIViews, и добавляет их как builtSubviews.Состояние гонки UIStackView?

Самое странное в том, что после того, как все мои для петли выполнены у меня есть NSLog:

NSLog(@"parentstackview height is %f",_parentStackView.frame.size.height); 

, который возвращает 0 (что она не должна, высота должна быть 1861 года после того, как все stackviews шоу которые они явно видят в симуляторе).

Но если я создаю этот метод:

- (void)testMethod{ 
    NSLog(@"parentstackview height is %f",_parentStackView.frame.size.height); 
} 

и заменить NSLog от ранее с этим:

[self performSelector:@selector(testMethod) withObject:nil afterDelay:1.0]; 

Затем он возвращается 1861 года точно, как и положено, после секундной задержки 1.

Почему 1 секунда задержки имеет значение?

ответ

3

Макет, скорее всего, не был выполнен внутри вашего кода, но обработан позже в цикле выполнения, который учитывает разные значения.

Если вам нужен размер в том же коде, который создает экземпляры вложенных стеков, вам нужно будет позвонить layoutIfNeeded(), чтобы сразу разместить все подпункты.

Вы не нашли бы эти данные в документации UIStackView, поскольку она задокументирована в суперклассе вида стека UIView class reference в разделе «Разделение подзапросов».

Смежные вопросы