Ios UIActivityIndicatorView位于UITableView控制器中UITableView的同一层次结构中

Ios UIActivityIndicatorView位于UITableView控制器中UITableView的同一层次结构中,ios,uitableview,uiactivityindicatorview,Ios,Uitableview,Uiactivityindicatorview,我有一个UIViewController,我在同一层次结构中删除了UITableView和UIActivityIndicatorView,它工作正常 但是我有一个UITableViewController,当然有一个UITableView,我试着在与表视图相同的层次结构中删除UIActivityIndicatorView,但没有成功。我知道UITableViewController和UIViewController与表视图之间存在问题,但如何解决 这两个屏幕截图将有助于理解问题 我希望它是这样的

我有一个UIViewController,我在同一层次结构中删除了UITableView和UIActivityIndicatorView,它工作正常

但是我有一个UITableViewController,当然有一个UITableView,我试着在与表视图相同的层次结构中删除UIActivityIndicatorView,但没有成功。我知道UITableViewController和UIViewController与表视图之间存在问题,但如何解决

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

我希望它是这样的:

结果是:


问题在于,对于
UIViewController
来说,它有一个
self.view
作为根视图,您可以在根视图中添加任何子项,但至少在IB中不能使用
UITableViewController
,因为根视图就是表本身

第一条路

在代码中添加它,控件在tableView滚动时处于位置,因此在
scrollViewDidScroll
中更改其帧,以便在加载过程中保持在屏幕中央

第二种方式


将其添加到应用程序的主窗口,并在加载完成时将其删除。问题是,使用
UIViewController
它有一个
self.view
作为根视图,您可以在根视图中添加任何子项,至少在IB中使用
UITableViewController
时不能这样做,因为根视图就是表本身

第一条路

在代码中添加它,控件在tableView滚动时处于位置,因此在
scrollViewDidScroll
中更改其帧,以便在加载过程中保持在屏幕中央

第二种方式


将其添加到应用程序的主窗口,并在加载完成时将其删除。拖放任何视图时(无论是UILabel还是UIActivityIndicatorViewUIView

如果它位于您放置在那里的单元格上方,它将被自动视为TableViewHeader

如果它位于您放置在那里的单元格下方,它将被自动视为TableViewFooter

这就是为什么它们处于同一级别的单元格视图层次结构的原因


如果您确实希望在
tableViewController
中的
表视图
的同一级别上使用
指示器视图
,即使您以编程方式创建它并将其添加到
表视图控制器的
self.view
,它也不会起作用,因为
tableViewController
self.view
是它的内容视图,不管怎样它都是可滚动的,这有点糟糕。当您拖放任何视图(无论是UILabel还是UIActivityIndicatorViewUIView)时,我们只能在
UIViewController
中进行完全控制

如果它位于您放置在那里的单元格上方,它将被自动视为TableViewHeader

如果它位于您放置在那里的单元格下方,它将被自动视为TableViewFooter

这就是为什么它们处于同一级别的单元格视图层次结构的原因


如果您确实希望在
tableViewController
中的
表视图
的同一级别上使用
指示器视图
,即使您以编程方式创建它并将其添加到
表视图控制器的
self.view
,它也不会起作用,因为
tableViewController
self.view
是它的内容视图,不管怎样它都是可滚动的,这有点糟糕。我们只能完全控制
UIViewController

好了,伙计们,我又找到了一个解决方案

UITableViewController

weak var spinner: UIActivityIndicatorView!
然后在
viewDidLoad
方法中进行此操作(希望代码是自解释的)

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

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

当你不需要的时候把它移除。

好了,伙计们,我又找到了一个解决方案

UITableViewController

weak var spinner: UIActivityIndicatorView!
然后在
viewDidLoad
方法中进行此操作(希望代码是自解释的)

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

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

在您不需要时删除它。

第一种方法有效,但键入太多:)第二种方法无效,可能是我做错了什么。第一种方法有效,但键入太多:)第二种方法无效,可能是我做错了什么。