2016-11-10 1 views
1

Поскольку я обновился до Xcode8/iOS10 & Swift 3 У меня есть эта странная проблема для сегментированных элементов управления, используемых в качестве заголовков навигационных панелей .. требуется некоторое время для появления. Или я могу коснуться области (невидимой в то время), и она появится.UISegmentedControl как UINavigationBar заголовок статьи загружается после некоторой задержки

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

UI не заблокирован.

не может найти способ его исправить.

PS: не мог воспроизвести на свежий проект

after some delay.. on touching area

Рассекая с Debug View Иерархии, он появляется в UISegmentedControls жизни, но не инициализирован с цветами/текстов .. то это будет мало секунд спустя.

enter image description here

+0

Как выглядит второй вид? Вы тестировали это на самом устройстве? Симуляторы (по крайней мере, для меня) подвергаются серьезным хитам производительности при попытке сделать что-либо на графическом процессоре. Может быть, вам не о чем беспокоиться? – dfd

+0

выпуск есть на тренажере и устройствах. этот сегментированный элемент управления фактически не привязан ни к чему – Akabab

ответ

0

Хорошо это было связано с потоками.

Мое приложение при загрузке инициализировало базовый стек данных. При обратном вызове я создавал правильный контроллер вида, используя window.rootViewController = vc, это нужно выполнить в основном потоке, но завершение инициализации стека основных данных было запущено на фоновом.


Что-то странное. Я внедрил расширение UIWindow

extension UIWindow { 

    func setRootViewController(with viewController: UIViewController) { 
    DispatchQueue.main.async { 
     self.rootViewController = viewController 
    } 
    } 

} 

// beeing in background thread 
self.window.setRootViewController(with: self.rootVC) 

это приведет к возникновению проблемы ниже.

, но следующий будет работать

extension UIWindow { 

    func setRootViewController(with viewController: UIViewController) { 
    self.rootViewController = viewController 
    } 

} 

// beeing in background thread 
DispatchQueue.main.async { 
    self.window.setRootViewController(with: self.rootVC) 
} 

не знаю, в чем разница.

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

  • Нет связанных вопросов^_^