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

UITableViewController中同级添加UIActivityIndicatorView失败的解决方法咨询

解决UITableViewController中添加UIActivityIndicatorView的布局问题

这个问题我之前也碰到过,核心原因是UITableViewController的根视图本身就是自带的UITableView,和普通UIViewController的视图结构完全不同:普通UIViewController是用一个普通UIView当根视图,再把tableView作为子视图;而UITableViewController的self.view直接就是那个tableView。所以你直接把指示器加在self.view上,本质是把它变成了tableView的子视图,自然会受tableView的布局、滚动逻辑影响,出现不符合预期的效果。

下面给你两种实用的解决思路:

方案1:改用UIViewController管理UITableView(最省心)

这完全贴合你之前成功的做法:

  • 新建一个普通的UIViewController,手动拖一个UITableView到控制器视图里,设置约束让它铺满整个屏幕。
  • 把UIActivityIndicatorView也添加到控制器的根视图上,和tableView同级,按照你之前的方式设置居中布局就行。
  • 最后让这个控制器遵守UITableViewDataSource和UITableViewDelegate协议,实现对应的数据源、代理方法,用法和UITableViewController几乎没区别,还能更灵活地控制视图层级。

方案2:在UITableViewController中正确配置指示器

如果一定要用UITableViewController,那可以这么做:

  • 把指示器添加到self.view(也就是自带的tableView)上,然后用Auto Layout给它加居中约束,确保它始终固定在屏幕中间,不受tableView滚动或自动inset的影响。示例代码(Swift):
    let loadingIndicator = UIActivityIndicatorView(style: .large)
    loadingIndicator.translatesAutoresizingMaskIntoConstraints = false
    loadingIndicator.hidesWhenStopped = true // 停止动画时自动隐藏
    self.view.addSubview(loadingIndicator)
    
    // 添加居中约束
    NSLayoutConstraint.activate([
        loadingIndicator.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        loadingIndicator.centerYAnchor.constraint(equalTo: view.centerYAnchor)
    ])
    
    loadingIndicator.startAnimating()
    
  • 如果发现指示器被tableView的cell挡住了,再加一行代码把它提到最上层:
    self.view.bringSubviewToFront(loadingIndicator)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:16:50