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 我无法解决这个问题。我决定将我所有的UIViewControllers 移至UITableViewControllers,它开始表现得更好。 你找到解决办法了吗? 【参考方案1】:

UIRefreshControl 应与UITableViewController 一起使用。在不在UITableViewController 中的UITableViews 上使用它可能会导致未定义的行为。

虽然让您的视图控制器成为UITableViewController 的子类并不总是可行的,但您始终可以拥有一个UIViewController 子类,它将UITableViewController 子类添加为子类。这样您就可以使用UIRefreshControlUITableViewController 提供的其他细节,同时仍然可以在需要时使用UIViewController 子类。

【讨论】:

以上是关于iOS 11 beginRefreshing 以编程方式在导航栏上显示大标题的主要内容,如果未能解决你的问题,请参考以下文章

iOS11上的程序化beginRefreshing()在largeTitles模式下存在问题

编程 .beginRefresh() 不刷新 UITableView 中的数据

UIRefreshControl - 当 UITableViewController 在 UINavigationController 中时,beginRefreshing 不起作用

UIRefreshControl - 当UITableViewController在UINavigationController中时,beginRefreshing无效

使用 UIDocumentBrowserViewController 重命名文档

ios - UIScrollView中的iOS编程缩放不起作用