为什么是UIActivityIndi​​catorView!零时解开?

问题描述:

我正在使用xcode 9/swift 4.我有一个WKWebView作为插座的简单UIViewController。为什么是UIActivityIndi​​catorView!零时解开?

class WebViewController: UIViewController, WKUIDelegate, WKNavigationDelegate { 

     @IBOutlet weak var webView: WKWebView! 

     var spinner:UIActivityIndicatorView! 

     override func loadView() 
     { 
      let webConfiguration = WKWebViewConfiguration() 
      webView = WKWebView(frame: .zero, configuration: webConfiguration) 
      webView.navigationDelegate = self 
      webView.uiDelegate = self 
      view = webView 

     } 

override func viewDidLoad() { 
     super.viewDidLoad() 
     spinner = UIActivityIndicatorView() 
     webView.addSubview(spinner) 
     spinner.center = self.webView.center 
     spinner.hidesWhenStopped = true 
     spinner.isHidden = true 
} 

首先,我想从故事板拖动UIActivityViewIndicator作为一个出口,但它始终只是不停地示数,每当我试图做任何事情如。 spinner.hidesWhenStopped说,它是零时,解包。

所以然后我尝试以编程方式创建一个微调器,但无法让它显示。我猜我犯了一个错误,认为我可以在webView的顶部添加微调器,例如。 webView.addSubview(旋转器)。

谢谢。

  1. 你有一个webView是一个插座,但你也创建它在loadView。如果它是你在Storyboard中创建的东西的出口,那么你不应该这样做。

  2. 您创建的webView有一个.zero框架。在viewDidLoad中,它可能仍然是.zero(检查) - 在这种情况下,微调器在0,0。

  3. 你可以让纺纱机出口。只要知道它只能在viewDidLoad或之后变得可用,而不是在loadView中(在使用Storyboard时通常不会覆盖)。如果你在该代码中做过,那么你已经停止了故事板被加载。您可以拨打super.loadView(),但我甚至不会覆盖。

这是我会做:

  1. 摆脱你loadView的。
  2. 使webView成为self.view的一个正常子节点 - 不要尝试为其设置视图。
  3. 添加微调作为出口
  4. 唯一获得viewDidLoad中微调或更高版本
  5. 使用自动布局定位和尺寸的一切(不只是设置中心)

(或者,如果你真的设置的loadView和获取视图作为web视图)

  1. 摆脱故事板,并尽一切编程
  2. 设置的位置当你知道webView有一个大小(使用自动布局来让这一切自动发生)时,微调控制器。