为什么选择UIActivityIndi​​catorView!打开时没有?

时间:2017-10-06 15:10:41

标签: ios swift uiactivityindicatorview

我正在使用xcode 9 / swift 4.我有一个简单的UIViewController,其中WKWebView作为插座。

    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 个答案:

答案 0 :(得分:3)

  1. 您有一个可以作为插座的webView,但您也在loadView创建它。如果它是你在故事板中创建的东西的出口,那么你不应该这样做。

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

  3. 你可以让旋转器成为出口。只知道它只能在viewDidLoad中使用,或者在loadView之后才能使用(在使用Storyboard时通常不会覆盖它)。如果您使用该代码,那么您已停止加载故事板。您可以拨打super.loadView(),但我甚至不会覆盖。

  4. 这就是我要做的事情:

    1. 摆脱您的loadView
    2. 使webView成为self.view的正常子项 - 不要尝试将视图设置为它。
    3. 添加微调器作为插座
    4. 仅访问viewDidLoad或更高版本中的微调器
    5. 使用自动布局来定位和调整所有内容(不要只设置中心)
    6. (或者如果你真的设置在loadView上并将视图设置为webView)

      1. 摆脱故事板并以编程方式执行所有操作
      2. 当您知道webView具有大小时,设置微调器的位置(使用自动布局以自动完成此操作)。