UIRefreschControl的Glitchy动画,带有导航栏的大标题

我有一个嵌入在导航控制器中的控制器,带有大标题和UIRefreshControl。 当我在tableView上进行快速刷新时,活动指示器的动画非常糟糕。

在此处输入图像描述

我不知道我的代码中是否有不良行为?

tableView.refreshControl = UIRefreshControl() tableView.refreshControl?.addTarget(self, action: #selector(downloadData), for: .valueChanged)

只将下面显示的代码放在 – (void)viewDidLoad方法中:

 -(void)viewDidLoad { self.extendedLayoutIncludesOpaqueBars = true; self.navigationController.navigationBar.translucent=false; } 

并确保导航栏半透明的属性设置为false,因为如果它为true,则导航栏需要其底层内容以反映半透明效果。 有关详细信息,请参阅此文章

有些时候可能会因为控制器中的某些组件(视图)打破一些约束规则而发生。

如果您已将导航栏半透明外观设置为false,则需要在视图控制器中包含以下代码以处理不透明条形。 此外,在storyboard中,tableView必须将顶部约束扩展到Superview。 不知何故,我不知道为什么没有适当的文档说明,但它似乎解决了毛刺动画。 self.extendedlayoutincludesopaquebars = true

在viewDidLoad中尝试此代码:

 navigationController?.navigationBar.isTranslucent = true 

或者在故事板中设置它

它帮助到我。

据我所知,我建议您使用UITableViewController而不是UIViewController ,其中嵌入了UITableView

这样做的一大优点是UITableViewController默认内置了很多这样的东西(比如UIRefreshControl ),所以你不必处理很多这些bug,手动向UIViewController添加UIRefreshControl总是一个对我来说有点儿麻烦。

通常,您希望尽可能尝试使用UITableViewController ,唯一不能使用它的地方是UITableView无法占用整个UIViewController

有关更多信息,请查看UITableViewController上的文档。

编辑:此外,如果您可以发布实际获取数据的代码将会很有用,因为这通常也是问题所在。