在具有大标题的导航控制器中时,UIRefreshControl 不会以横向方式显示

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

我有一个普通的

UITableViewController
嵌入在
UINavigationController
中,更喜欢大标题。我向表视图控制器添加了刷新控件。

在 iOS 11 中的 iPhone 上,如果我以纵向模式启动应用程序,切换到横向模式并开始刷新表格视图,刷新控件不会显示。刷新发生,但控件不存在。它甚至不在视图层次结构中:

view hierarchy

请注意,如果我处于纵向模式,则同样的在 iPhone 上适用,并且在 iPad 上的各个方向上也适用。 它也适用于 iOS 10,适用于所有设备和每个方向,如果我禁用大标题,它也适用于 iOS 11,所以它显然与大标题有关。

这是 iOS 10 上相同内容的屏幕截图:

screenshot of the refresh control on iOS 10

这是 Interface Builder 中的整个设置:

screenshot of setup

当我尝试使用带有嵌入式

UIViewController

UITableView
 的简单 
UIScrollView
 时,也会发生同样的事情。

我很确定这是一个错误。如何使刷新控件在横向 iPhone 上可见?

ios iphone uinavigationcontroller ios11 uirefreshcontrol
2个回答
4
投票
我们通过在每次旋转时重新创建刷新控件来修复此问题。它也在 viewDidLoad() 中被调用。

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { super.traitCollectionDidChange(previousTraitCollection) if traitCollection.verticalSizeClass != previousTraitCollection?.verticalSizeClass { tableView.refreshControl = UIRefreshControl() // !!! tableView.refreshControl.addTarget(self, action: #selector(didPullToRefresh), for: .valueChanged) } } @objc func didPullToRefresh() { DispatchQueue.main.asyncAfter(deadline: .now() + 1) { [weak self] in tableView.refreshControl.endRefreshing() } // ... }
    

1
投票
这显然可以被定性为一个错误。它很容易复制。你的描述看起来很正确;一旦您以纵向方式暴露刷新控件,然后旋转到横向,刷新控件甚至不在横向界面中(如果给它设置背景颜色,很容易看到)。

不过,总体而言,这并不令人意外。有很多与大标题相关的错误;苹果显然没有仔细考虑这个功能。

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