iOS 11 beginRefreshing 以编程方式在导航栏上显示大标题
Posted
技术标签:
【中文标题】iOS 11 beginRefreshing 以编程方式在导航栏上显示大标题【英文标题】:iOS 11 beginRefreshing programmatically with large title on navigation bar 【发布时间】:2017-09-21 19:35:38 【问题描述】:在 ios 10 中,我曾经像这样以编程方式开始刷新UIRefreshControl
(以编程方式显示刷新控件):
self.tableView.setContentOffset(CGPoint(x: 0, y: - self.refreshControl.bounds.height), animated: false)
self.refreshControl.beginRefreshing()
但现在在 iOS 11 中,该代码不起作用,它只会弄乱UINavigationController
的大小,并且不会出现UIRefreshControl
。
如何在 iOS 11 中使用 prefersLargeTitles
以编程方式刷新 UIRefreshControl
(以编程方式显示刷新控件)?
【问题讨论】:
正如doc 所说,Because the refresh control is specifically designed for use in a table view that's managed by a table view controller, using it in a different context can result in undefined behavior.
,请尝试改用UITableViewController
。
到目前为止有什么运气可以解决这个问题吗?我遇到了同样的问题,当我在模拟器中运行我的应用程序时,它时不时地按预期工作,但是当我下次启动应用程序时,它又把导航栏弄乱了......
@xxtesaxx 我无法解决这个问题。我决定将我所有的UIViewController
s 移至UITableViewController
s,它开始表现得更好。
你找到解决办法了吗?
【参考方案1】:
UIRefreshControl
应与UITableViewController
一起使用。在不在UITableViewController
中的UITableView
s 上使用它可能会导致未定义的行为。
虽然让您的视图控制器成为UITableViewController
的子类并不总是可行的,但您始终可以拥有一个UIViewController
子类,它将UITableViewController
子类添加为子类。这样您就可以使用UIRefreshControl
和UITableViewController
提供的其他细节,同时仍然可以在需要时使用UIViewController
子类。
【讨论】:
以上是关于iOS 11 beginRefreshing 以编程方式在导航栏上显示大标题的主要内容,如果未能解决你的问题,请参考以下文章
iOS11上的程序化beginRefreshing()在largeTitles模式下存在问题
编程 .beginRefresh() 不刷新 UITableView 中的数据
UIRefreshControl - 当 UITableViewController 在 UINavigationController 中时,beginRefreshing 不起作用
UIRefreshControl - 当UITableViewController在UINavigationController中时,beginRefreshing无效