UIActivityIndi​​catorView在UITableViewController中的UITableView的相同层次结构中

时间:2018-05-24 21:22:35

标签: ios uitableview uiactivityindicatorview

我有一个UIViewController,我在同一个层次结构中删除了一个UITableView和UIActivityIndi​​catorView,它运行正常。

但是我有一个UITableViewController,当然还有UITableView,我尝试将UIActivityIndi​​catorView放在与Table View相同的层次结构中,但没有运气。我知道UITableViewController和UIViewController与Table View有问题,但如何解决?

这两个屏幕截图有助于理解这个问题。

我想要它的方式:

enter image description here

事实证明:

enter image description here

3 个答案:

答案 0 :(得分:1)

问题在于,UIViewController它有一个self.view作为根视图,您可以像添加任何子项一样添加任何子项,因此至少可以执行此操作以UITableViewController作为根视图的IB是表本身

第一种方式

在代码中添加它,并在tableView滚动时控制位置,因此在scrollViewDidScroll中更改它的框架,以便在加载期间保持在屏幕中心

第二种方式

将其添加到应用程序的主窗口,并在加载完成时将其删除

答案 1 :(得分:1)

当您拖放任何视图时(无论是 UILabel 还是 UIActivityIndi​​catorView UIView ),

如果高于您放置的单元格,则会自动将其视为 TableViewHeader

如果低于您放置的单元格,则会自动将其视为 TableViewFooter

这就是他们处于相同级别的单元格视图层次的原因。

如果您确实想要使用与indicatorView tableView相同级别的tableViewController,即使您以编程方式创建它并将其添加到tableviewcontroller' s self.view不会工作,因为tableViewController的{​​{1}}是其内容视图,无论如何都是可滚动的,这有点令人失望。我们只能在self.view中完全控制。

答案 2 :(得分:1)

好的,我找到了另外一个解决方案。

UITableViewController

中定义变量
weak var spinner: UIActivityIndicatorView!

然后在viewDidLoad方法中进行此操作(希望代码是自解释的)

let activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: .gray)
tableView.backgroundView = activityIndicatorView
tableView.separatorStyle = .none
self.spinner = activityIndicatorView

然后在需要显示时调用spinner.startAnimating()

self.spinner.stopAnimating()
self.tableView.separatorStyle = .singleLine

在您不需要时将其删除。