UISegmentedControl作为UINavigationBar标题项在一些延迟后加载

时间:2016-11-10 13:35:32

标签: ios swift xcode uinavigationbar uisegmentedcontrol

自从我更新到Xcode8 / iOS10& Swift 3我对用作导航栏标题的分段控件有这个奇怪的问题..它需要一些时间才能出现。或者我可以触摸该区域(当时不可见)并且它将出现。

我认为该项目已加载但尚未绘制,然后通过触摸该区域绘制或者因为事件循环要求查看重绘。

用户界面未被屏蔽。

无法找到修复方法。

PS:无法重现新项目

after some delay.. on touching area

打破调试视图层次结构,看起来UISegmentedControls存在,但没有使用颜色/文本进行初始化..几秒钟之后就会初始化。

enter image description here

1 个答案:

答案 0 :(得分:0)

好的,这是由于线程。

我的加载应用是初始化核心数据堆栈。在它的回调中,我使用window.rootViewController = vc实例化了正确的视图控制器,这需要在主线程上执行,但核心数据堆栈init的完成是在后台启动的。

奇怪的是。我实现了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)
}

不知道有什么不同。