我有一个UIViewController,我在同一个层次结构中删除了一个UITableView和UIActivityIndicatorView,它运行正常。
但是我有一个UITableViewController,当然还有UITableView,我尝试将UIActivityIndicatorView放在与Table View相同的层次结构中,但没有运气。我知道UITableViewController和UIViewController与Table View有问题,但如何解决?
这两个屏幕截图有助于理解这个问题。
我想要它的方式:
事实证明:
答案 0 :(得分:1)
问题在于,UIViewController
它有一个self.view
作为根视图,您可以像添加任何子项一样添加任何子项,因此至少可以执行此操作以UITableViewController
作为根视图的IB是表本身
第一种方式
在代码中添加它,并在tableView滚动时控制位置,因此在scrollViewDidScroll
中更改它的框架,以便在加载期间保持在屏幕中心
第二种方式
将其添加到应用程序的主窗口,并在加载完成时将其删除
答案 1 :(得分:1)
当您拖放任何视图时(无论是 UILabel 还是 UIActivityIndicatorView 或 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
在您不需要时将其删除。