繁体   English   中英

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

[英]UIActivityIndicatorView in the same hierarchy of UITableView in UITableViewController

我有一个UIViewController,并且在同一层次结构中放置了UITableView和UIActivityIndi​​catorView,并且工作正常。

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

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

我想要的方式是:

在此处输入图片说明

事实证明:

在此处输入图片说明

问题是,使用UIViewController它具有一个self.view作为根视图,您可以在其中添加任何子项,就像在IB中使用UITableViewController那样,至少不能在IB中这样做,因为根视图是表本身

第一种方式

将其添加到代码中,并且控件在tableView滚动时处于位置,因此在scrollViewDidScroll更改其框架,以便在加载期间它位于屏幕的中心

第二种方式

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

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

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

如果它在您放置的单元格下面 ,它将被自动视为TableViewFooter

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

如果您真的想在tableView中的tableViewController同一级别使用indicatorView ,即使您以编程方式创建它并将其添加到tableviewcontrollerself.view ,它也无法正常工作,因为tableViewControllerself.view是它的内容视图,无论如何都可以滚动,这简直太糟糕了。 我们只有UIViewController拥有完全控制权。

好的,伙计们,我找到了另一个解决方案。

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

在不需要时将其删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM