UIRefreshControl渲染在UINavigation w Large Titles后面。

问题描述 投票:0回答:1

我正试图创建一个 UITableViewController,有 UINavigationBar 使用大标题。

我遇到的麻烦是,当在空表视图上使用拉动刷新时,加载指示器在大标题的文本后面。

如果我第二次拉动刷新,就不会出现这个问题。

我已经附上了一个显示这种行为的gif图。unwanted behaviour

我的视图控制器在这一点上非常简单

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"
  }
}

swift uitableview uinavigationcontroller uirefreshcontrol
1个回答
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"
  }

0
投票

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

self.edgesForExtendedLayout = []

它使你的表格视图不与你的导航栏冲突。

© www.soinside.com 2019 - 2024. All rights reserved.