You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将UIActivityIndicatorView添加到WKWebView的中心位置

问题原因
  • 时序错误:初始化spinner时就设置其frame依赖webView的宽高,但此时webView还没有被设置有效frame,宽高均为0,spinner的中心点坐标最终计算为(0,0),自然显示在左上角。后续webView的frame更新后,spinner的frame不会自动同步调整,位置就不会变化。
  • 自动布局规则不完整:当你给webView设置translatesAutoresizingMaskIntoConstraints = false后,你之前设置的webView frame会自动失效,必须手动给webView添加位置和尺寸约束,否则系统无法确定webView的布局,就会出现布局歧义警告、webView完全不显示的问题。
  • 视图层级问题:最初将spinner作为webView的子视图添加,会被webView的边框层、内容层覆盖,所以显示在边框下方。
修正后的代码
var webView = WKWebView()
var detailItem : CountriesFinal?
var spinner = UIActivityIndicatorView()
override func viewDidLoad() {
    super.viewDidLoad()
    
    // 先配置webView的自动布局约束
    webView.translatesAutoresizingMaskIntoConstraints = false
    webView.navigationDelegate = self
    webView.backgroundColor = .blue
    webView.layer.borderWidth = 5
    webView.layer.borderColor = UIColor.red.cgColor
    webView.contentMode = .scaleAspectFit
    self.view.addSubview(webView)
    
    // 给webView添加固定位置和尺寸约束,替换原来的frame设置
    NSLayoutConstraint.activate([
        webView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 125),
        webView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 150),
        webView.widthAnchor.constraint(equalToConstant: 250),
        webView.heightAnchor.constraint(equalToConstant: 150)
    ])
    
    // 配置spinner的自动布局,让它一直居中在webView上方
    spinner.translatesAutoresizingMaskIntoConstraints = false
    spinner.hidesWhenStopped = true
    self.view.insertSubview(spinner, aboveSubview: webView)
    NSLayoutConstraint.activate([
        spinner.centerXAnchor.constraint(equalTo: webView.centerXAnchor),
        spinner.centerYAnchor.constraint(equalTo: webView.centerYAnchor)
    ])
    spinner.startAnimating()
}
替代方案

如果你不需要webView自适应不同尺寸的屏幕,也可以不设置translatesAutoresizingMaskIntoConstraints = false,保留原来的frame设置,同时添加如下方法更新spinner位置即可:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    spinner.center = webView.center
}

内容的提问来源于stack exchange,提问作者PowerPlay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:36:04