UIRefreshControl 在带有大标题的 UINavigation 后面呈现

Posted

技术标签:

【中文标题】UIRefreshControl 在带有大标题的 UINavigation 后面呈现【英文标题】:UIRefreshControl renders behind UINavigation w/ Large Titles 【发布时间】:2020-05-14 14:41:39 【问题描述】:

我正在尝试使用大标题创建UITableViewControllerUINavigationBar

我遇到的问题是,在空表视图上使用 pull 刷新时,加载指示器位于大标题的文本后面。

如果我第二次拉刷新就没有这个问题了。

我附上了一个显示行为的 gif。

此时我的视图控制器非常简单

final class FeedSceneViewController: UITableViewController 

  private var loader: FeedLoader?

  convenience init(loader: FeedLoader) 
    self.init()
    self.loader = loader
  

  override func viewDidLoad() 
    super.viewDidLoad()

    tableView.refreshControl = .init()
    load()

    configureTableView()
    configureUI()
  

  func load() 
    tableView.refreshControl?.set(isRefreshing: true)
    loader?.load(then:  [weak self] _ in self?.refreshControl?.set(isRefreshing: false) )
  



private extension FeedSceneViewController 

  func configureTableView() 
    tableView.backgroundColor = .usingHex("fafafa")
    tableView.tableFooterView = .init()
  

  func configureUI() 
    navigationController?.navigationBar.prefersLargeTitles = true
    navigationItem.title = "Latest content"
  


【问题讨论】:

【参考方案1】:

您似乎是在配置大导航后设置刷新控件。

尝试将顺序更改为这样的 -

  override func viewDidLoad() 
    super.viewDidLoad()

    load()

    configureTableView()
    configureUI()
  
.......
  func configureTableView() 
    tableView.backgroundColor = .usingHex("fafafa")
    tableView.tableFooterView = .init()
    tableView.contentInsetAdjustmentBehavior = .always
    tableView.refreshControl = .init()
  

  func configureUI() 
    navigationController?.navigationBar.prefersLargeTitles = true
    navigationItem.title = "Latest content"
  

【讨论】:

【参考方案2】:

也许你可以在你的 viewDidLoad() 中试试这个

self.edgesForExtendedLayout = []

它使您的表格视图不会与您的导航栏冲突

【讨论】:

以上是关于UIRefreshControl 在带有大标题的 UINavigation 后面呈现的主要内容,如果未能解决你的问题,请参考以下文章

UITableView - 带有背景图像的 UIRefreshControl

UIRefreshControl endRefresh 在启用大标题时跳转

带有 RxSwift 的 UIRefreshControl

带有 UISearchBar 的异常行为 UIRefreshControl

带有 UIRefreshControl 的 ScrollView 在显示为模式表时不会刷新

UIRefreshControl 未在 iOS 10 以下显示带有 DialogViewController 的 Xamarin