Несмотря на то, что может быть несколько основных причин такого поведения, вот распространенная проблема, с которой я столкнулся, которая вызывает «отложенные» или «прерывистые» обновления представлений UIKit.
Если операторы, которые обновляют ваше представление представления (или представленное представление), выполняются в очереди отправки, отличной от основной очереди, UIKit может привести к противоречивым результатам и времени в фактическом обновлении пользовательского интерфейса. Обычно это можно определить, установив точку останова в операторах, которые обновляют пользовательский интерфейс, и изучив имя «очереди», отображаемой в виде отладчика Xcode слева. Это должен быть com.apple.main-thread. Если это не так, это может быть вашей проблемой. Это может происходить в нескольких методах делегатов, таких как сетевые API.
Попробуйте обернуть обновления вашего интерфейса в:
dispatch_async (dispatch_get_main_queue (), ^ () {...}); и посмотрите, поможет ли это! Вы должны делать это только тогда, когда это необходимо, и позаботиться о том, чтобы использовать безопасные для блоков методы, как всегда.
Я протестировал это в совершенно новом Универсальном приложении для iOS 7.0.3, используя симулятор iPad с контроллером представления, представленным с использованием частичного перехода скручивания. Мне удалось воспроизвести исходную проблему, включая прерывистое обновление и обновление «оснастки» при отклонении представленного представления, используя фоновую очередь в коде, который я предоставил выше. Как только я переключился на основную очередь, все заработало. Хорошо.
Дайте мне знать, если это поможет или была какая-то другая проблема:)