为什么是UIActivityIndicatorView!零时解开?
问题描述:
我正在使用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作为一个出口,但它始终只是不停地示数,每当我试图做任何事情如。 spinner.hidesWhenStopped说,它是零时,解包。
所以然后我尝试以编程方式创建一个微调器,但无法让它显示。我猜我犯了一个错误,认为我可以在webView的顶部添加微调器,例如。 webView.addSubview(旋转器)。
谢谢。
答
你有一个webView是一个插座,但你也创建它在
loadView
。如果它是你在Storyboard中创建的东西的出口,那么你不应该这样做。您创建的webView有一个.zero框架。在viewDidLoad中,它可能仍然是.zero(检查) - 在这种情况下,微调器在0,0。
你可以让纺纱机出口。只要知道它只能在viewDidLoad或之后变得可用,而不是在loadView中(在使用Storyboard时通常不会覆盖)。如果你在该代码中做过,那么你已经停止了故事板被加载。您可以拨打
super.loadView()
,但我甚至不会覆盖。
这是我会做:
- 摆脱你
loadView
的。 - 使webView成为self.view的一个正常子节点 - 不要尝试为其设置视图。
- 添加微调作为出口
- 唯一获得viewDidLoad中微调或更高版本
- 使用自动布局定位和尺寸的一切(不只是设置中心)
(或者,如果你真的设置的loadView和获取视图作为web视图)
- 摆脱故事板,并尽一切编程
- 设置的位置当你知道webView有一个大小(使用自动布局来让这一切自动发生)时,微调控制器。