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

时间:2017-12-05 09:09:52

标签: ios swift uinavigationbar ios11 pull-to-refresh

我在导航控制器中嵌入了一个带有大标题和UIRefreshControl的控制器。当我在tableView上进行pull-to-refresh时,活动指示器的动画非常小。

enter image description here

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

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

4 个答案:

答案 0 :(得分:3)

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

self.extendedLayoutIncludesOpaqueBars = true

除此之外,我还发现这个设置在@ Ravi Raja Jangid发布的链接的帮助下运作良好。我不确定它是否因为tableview现在附加到Superview(扩展状态栏)或iOS版本升级修复了错误的问题。

Explaining difference between automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout in iOS7

SearchController:

private lazy var searchController: UISearchController = {
        let searchController = UISearchController(searchResultsController: nil)
        searchController.searchResultsUpdater = self
        searchController.obscuresBackgroundDuringPresentation = false
        searchController.hidesNavigationBarDuringPresentation = false
        self.definesPresentationContext = false
        return searchController
    }()

viewDidLoad中()

self.navigationItem.hidesSearchBarWhenScrolling = false
self.navigationItem.searchController = self.searchController
self.navigationController?.navigationBar.isTranslucent = false
self.extendedLayoutIncludesOpaqueBars = true

故事板设置: TableView top constraint must be to Superview

答案 1 :(得分:2)

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

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

并确保将导航栏半透明的属性设置为false,因为如果为true,则导航栏需要其下方的内容来反映半透明效果。有关更多详细信息,请参阅this post

有时可能会由于Controller中某些组件(视图)违反某些约束规则而发生。

答案 2 :(得分:0)

据我所记得,我建议您使用UITableViewController代替嵌入了UIViewController的{​​{1}}。

此方法的最大优点是UITableView已经默认内置了许多此类内容(例如UITableViewController),因此您不必处理许多此类错误,将UIRefreshControl手动添加到UIRefreshControl总是对我来说有点麻烦。

通常,您会尽可能尝试使用UIViewController,唯一无法使用的地方是UITableViewController无法占据整个{{ 1}}。

Check out the documentation on UITableViewController for more info.

编辑:另外,如果您可以发布实际上是在获取数据的代码,这将很有用,因为很多时候这也可能成为问题。

答案 3 :(得分:-1)

在viewDidLoad中尝试此代码:

navigationController?.navigationBar.isTranslucent = true

或在故事板中设置

它帮助了我。