2017-10-06 8 views
1

xcode 9/swift 4를 사용하고 있습니다. WKWebView가있는 간단한 UIViewController가 있습니다.왜 UIActivityIndicatorView입니까! 풀어지지 않을 때는 없습니까?

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 때 unwrapped 때 그것은 아무것도 아니었다.

그렇다면 프로그래밍 방식으로 회 전자를 만들려고했지만 그 중 하나를 표시 할 수는 없습니다. 나는 내가 예를 들어 WebView 위에 스피너를 추가 할 수 있다고 생각하고있다. webView.addSubview (회 전자).

감사합니다.

답변

2
  1. 콘센트 인 webView가 있지만, loadView에서도 생성 중입니다. 스토리 보드에서 만든 무언가에 대한 콘센트라면, 그렇게해서는 안됩니다.

  2. 작성한 webView의 프레임은 .zero입니다. viewDidLoad에서 여전히 .zero (check)입니다.이 경우 스피너는 0,0에 있습니다.

  3. 스피너를 콘센트로 만들 수 있습니다. viewDidLoad 또는 loadView에서는 사용할 수 없게됩니다 (스토리 보드를 사용할 때는 일반적으로 덮어 쓰지 않습니다). 해당 코드에서 수행 한 경우 스토리 보드의로드가 중단되었습니다. super.loadView()으로 전화 할 수는 있지만 무시하지는 않습니다.

이 내가 할 것 인 것이다 :

  1. 은 당신의 loadView 제거하십시오.
  2. webView를 self.view의 일반적인 자식으로 만듭니다.보기를 설정하지 마십시오.
  3. 이 만있는 viewDidLoad에서 회 이상
  4. 를 사용하여 자동 레이아웃 배치하고 크기 다 (다만 설정되지 센터)

에 액세스 콘센트로 스피너를 추가 (또는 당신이 정말로 마치 에는 loadView 설정 및보기를 점점로 웹보기)

  1. 프로그래밍
  2. 이 위치를 설정 스토리 보드를 제거하고 모든 일을하기 스피너는 webView에 크기가 있음을 알 때 (자동 레이아웃을 사용하여이 모든 것을 자동으로 처리합니다).