2017-10-06 10 views
1

私は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をドラッグしてみましたが、私は例えば何かをしようとした時はいつでも、それは常にちょうどerroring続けました。 spinner.hidesWhenラップされていないときは無しと言っていた。

私はプログラムでスピンナーを作成しようとしましたが、どちらかを表示することはできません。私は、WebViewの上にスピナーを追加できると思っている間違いをしていると思います。 webView.addSubview(スピナー)。

ありがとうございました。

答えて

2
  1. あなたはアウトレットであるwebViewを持っていますが、loadViewでも作成しています。ストーリーボードで作成したもののコンセントであれば、これを行うべきではありません。

  2. 作成したWebViewには、フレームが.zeroです。 viewDidLoadではおそらくまだ.zero(チェック)です。その場合、スピナーは0,0になります。

  3. スピナーをコンセントにすることができます。 viewDidLoadでのみ使用できるようになり、loadViewではなく、通常はストーリーボードを使用するときにオーバーライドしないようになります。あなたがそのコードで行った場合、ストーリーボードの読み込みが停止されています。 super.loadView()に電話することができますが、私はオーバーライドさえしません。

これは私がどうなるのかです:

  1. はあなたのloadViewを取り除きます。
  2. webViewをself.viewの通常の子にします。ビューを設定しようとしないでください。
  3. のみ位置とサイズすべてにのviewDidLoadでスピナー以降
  4. 使用自動レイアウトにアクセスアウトレット
  5. としてスピナーを追加します(ちょうど中央に設定していない)

(またはあなたが本当にありましたかloadViewメソッドで設定し、ビューはWebViewのようになって)

  1. ストーリーボードを取り除くと、すべてを行うプログラムで
  2. の位置を設定します。 WebViewにサイズがあることを知っているときにスピナーを使用します(このすべてが自動的に行われるように自動レイアウトを使用します)。
関連する問題