UIActivityIndi catorView未在webview中显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIActivityIndi catorView未在webview中显示相关的知识,希望对你有一定的参考价值。

我有一个UINavigationController,我正在添加一个UIViewController。在我的UIViewController里面,我有一个webview,还试图设置一个UIActivityIndi​​catorView。但是我似乎无法让UIActivityIndi​​catorView显示出来。任何帮助都会很棒!

class TestWebViewController: UIViewController {

    var loadSpinner: UIActivityIndicatorView!

    var webView: UIWebView!

    var title: String?

    init(title: String?) {
       self.title = title

       self.webView = UIWebView(frame: CGRect.zero)
       super.init(nibName: nil, bundle: nil)
       commonInit()
    }

    func commonInit() {
       loadSpinner = UIActivityIndicatorView(activityIndicatorStyle: .gray)
       loadSpinner.center = webView.center
       view.addSubview(loadSpinner)
       webView.delegate = self
       view = webView
    }

    required init?(coder aDecoder: NSCoder) {
       fatalError("init(coder:) has not been implemented")
    }

UINavigationController(rootViewController: testWebViewController)

即使我尝试将loadSpinner添加到webView,它也不会出现webView.addSubview(loadSpinner)

答案

结果:enter image description here

码:

class ViewController: UIViewController {

var loadSpinner: UIActivityIndicatorView!
var webView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    self.webView = UIWebView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

    loadSpinner = UIActivityIndicatorView(activityIndicatorStyle: .gray)

    webView.addSubview(loadSpinner)

    view = webView

    loadSpinner.startAnimating()
}

override func viewDidLayoutSubviews() {
    loadSpinner.center = webView.center
}
}
另一答案

您的主要问题是您首先将活动指示符添加到视图控制器的视图中,但稍后您将使用Web视图替换视图控制器的视图。

如果要替换视图控制器的视图,则应在loadView中执行此操作。您还应该在viewDidLoad中设置其他视图,而不是在init方法中。

最简单的改变是摆脱你的commonInit方法并将所有代码放在viewDidLoad中。然后在viewDidLoad中,首先设置Web视图,然后设置活动指示器。

class TestWebViewController: UIViewController {
    var loadSpinner: UIActivityIndicatorView!
    var webView: UIWebView!
    var title: String?

    init(title: String?) {
       self.title = title

       super.init(nibName: nil, bundle: nil)
    }

    override func loadView() {
        // don't call super

       webView = UIWebView(frame: CGRect.zero)
       webView.delegate = self
       view = webView
    }

    override func viewDidLoad() {
       super.viewDidLoad()

       loadSpinner = UIActivityIndicatorView(activityIndicatorStyle: .gray)
       loadSpinner.center = view.center
       // Keep it in the center
       loadSpinner.autoresizingMask = [.flexibleWidth, .flexibleLeftMargin, .flexibleRightMargin]
       view.addSubview(loadSpinner)
    }

    required init?(coder aDecoder: NSCoder) {
       fatalError("init(coder:) has not been implemented")
    }

您还有title的问题。 UIViewController已经有一个title财产。你不应该添加自己的。

另一答案

您需要在viewDidLoad中重构这样的代码

class TestWebViewController: UIViewController {

    var loadSpinner: UIActivityIndicatorView!

    var webView: UIWebView!

    var title: String?

    override func viewDidLoad()
    {
        super.viewDidLoad()

        webView = UIWebView(frame:self.view.frame)

        webView.delegate = self

        self.view.addSubview(webview)

        loadSpinner = UIActivityIndicatorView(activityIndicatorStyle: .gray)

        self.view.addSubview(loadSpinner)

        loadSpinner.center = self.view.center

        loadSpinner.startAnimating()
    }
}   

以上是关于UIActivityIndi catorView未在webview中显示的主要内容,如果未能解决你的问题,请参考以下文章

UIActivityIndi​​catorView 不呈现

UIActivityIndi​​catorView 不工作(获取影响 UIActivityIndi​​catorView 的 Facebook 权限)

UIActivityIndi​​catorView 正确使用

UIActivityIndi catorView未在webview中显示

UIButton里面的UIActivityIndi​​catorView

Swift UIPageViewController & UIActivityIndi​​catorView