UIRefreshControl 在带有大标题的 UINavigation 后面呈现
UIRefreshControl renders behind UINavigation w/ Large Titles
我正在尝试创建一个 UITableViewController
,UINavigationBar
使用大标题。
我遇到的问题是,在空 table 视图上使用拉动刷新时,加载指示器位于大标题文本的后面。
如果我第二次拉动刷新就没有这个问题。
我附上了一张显示该行为的 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"
}
}
看来你是在设置大导航后设置刷新控件。
试试把顺序改成这样-
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"
}
也许你可以在你的 viewDidLoad() 中试试这个
self.edgesForExtendedLayout = []
它使您的 table 视图不会与您的导航栏冲突
我正在尝试创建一个 UITableViewController
,UINavigationBar
使用大标题。
我遇到的问题是,在空 table 视图上使用拉动刷新时,加载指示器位于大标题文本的后面。
如果我第二次拉动刷新就没有这个问题。
我附上了一张显示该行为的 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"
}
}
看来你是在设置大导航后设置刷新控件。
试试把顺序改成这样-
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"
}
也许你可以在你的 viewDidLoad() 中试试这个
self.edgesForExtendedLayout = []
它使您的 table 视图不会与您的导航栏冲突