2015-07-29 3 views
1

У меня есть контроллер в раскадровке, состоящий из двух видов контейнеров. Я установил вертикальное расстояние между двумя контейнерами до нуля.Мерцание при использовании layoutIfNeeded on containserview

Я хочу изменить ограничение высоты одного из контейнеров во время выполнения.

Вот код для изменения ограничения:

[UIView animateWithDuration:kAnimationDuration animations:^{ 
    self.offeringContainerHeightConstraint.constant = [SJDataManager shared].offeringItems.count * kOfferingCellHeight + kOfferingHeaderHeight; 
    [self.view layoutIfNeeded]; 
}]; 

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

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

+0

Я думаю (но не уверен), что animateWithDuration выполняется на фоновом потоке, а layoutIfNeeded должен выполняться в основном потоке. Что произойдет, если вы инкапсулируете его так: dispatch_get_main_queue(),^{[self.view layoutIfNeeded];}); – Teddy

+0

Это приводит к тому, что вся анимация возникает сразу, что выглядит очень плохо. – Santosh

+0

Я думал, что это ваше намерение извините. Но исчезло ли мерцание? – Teddy

ответ

0

Я наконец нашел решение для этого. На самом деле это была разница между ожидаемымHeightForRowAtIndexPath и heightForRowAtIndexPath. Поскольку высота, возвращаемая этими двумя методами, различна, поэтому я получаю мерцание.

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