iOS 11中的UIRefreshControl与NavigationBar LargeTitle和SearchController消失

18
我有一个带有大标题和搜索控制器的navigationBar,我的tableView有一个refreshcontrol。
当我下拉刷新时,refreshcontrol的activityIndicator消失了,但是刷新过程仍在继续,即使进程完成并调用UIRefreshControl的.endRefreshing()方法,navigationBar也不会恢复到正常大小。

enter image description here

有相同问题的人吗?


我遇到了完全相同的问题。刷新完成后,底层表视图会跳回其原始位置,但导航栏仍处于刷新状态。你找到解决方法了吗? - xxtesaxx
@xxtesaxx,我的回答可能会对你有帮助:https://dev59.com/oVYN5IYBdhLWcg3w2rWU#47659869 - beebcon
3个回答

28

我已经搜索了几周找这个解决方案,今天终于让它运作起来了。解决方案非常简单,我简直不能相信早些时候没有找到它。

我使用了一个普通的UIViewController和UITableView。我的布局约束是将UITableView与底部和顶部布局指南全部固定为0,如下所示:

enter image description here

一旦我改变了这个并将UITableView固定到Superview的所有边缘都为0,它神奇地开始工作了:

enter image description here

我甚至不需要设置其他任何东西。我真心希望这也能为你解决问题,因为它实在太烦人了...


如果上述方法无效,则还需要进行以下设置

self.extendedLayoutIncludesOpaqueBars = YES;

或者在Storyboard中勾选"Extend Edges / Under Opaque Bar"


这个让我省了不少麻烦!你知道为什么吗? - camleng
1
很遗憾,对我没有起作用...(通过代码视图而不是故事板来完成) - Bruno Rocha
您是否通过代码设置约束?请确保将滚动视图固定在父视图顶部和底部,而不是布局指南或安全区域。 - xxtesaxx
@BrunoRocha 我的解决方案可能会对你有所帮助:https://dev59.com/oVYN5IYBdhLWcg3w2rWU#47659869 - beebcon
这太棒了! - Zaya

13

尝试一下

self.extendedLayoutIncludesOpaqueBars = YES;

如果你的导航栏是不透明的话,这个方法对我有用,它可以修复这个问题。


1
它对我起作用了!谢谢 - Charles Lima
运行得非常好!TableView 跳回了顶部,但导航栏保持不变。哦,指示器也看不见了...多亏了你,现在都修复好了! - MikeB
只有当我也执行了xxtesaxx答案中的内容时,这才起作用。 - Peter Lapisu

-1

尝试使用这段代码片段:

self.navigationController?.navigationBar.prefersLargeTitles = false
self.navigationController?.navigationBar.prefersLargeTitles = true;

3
语境?你在哪里和何时使用这个? - tempire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接