我的viewcontroller有一个tableview,我可以在不同的部分填充我的视图。我正在尝试向此tableview添加刷新控件。我实施的内容如下。
func setUpRefreshControl() {
let refreshControl = UIRefreshControl()
refreshControl.tintColor = UIColor.red
refreshControl.addTarget(self, action: #selector(handleRefresh(_: )), for: UIControlEvents.valueChanged)
if #available(iOS 10.0, *) {
tableView.refreshControl = refreshControl
} else {
tableView.addSubview(refreshControl)
}
}
@objc func handleRefresh(_ sender: UIRefreshControl) {
print("-----------REFRESHED------------")
}
接下来,当我下拉tableview进行刷新时,刷新控件(设置为红色)可见。但是,不会调用目标函数。
我的viewcontroller位于标签栏控制器内,该控制器嵌入在导航控制器中。我想这个问题与视图层次结构有关,因为当我在没有导航栏和标签栏的单独项目中尝试相同的代码时,它的工作正常。但我无法弄清楚当前的问题是什么。解决这个问题的任何建议?谢谢。
编辑:我在不同的模拟器中测试过它:6,6s,6s +,7,7 +,8,8 +,X。我发现上面的代码在所有加号版本中运行良好包括X.但是,所有模拟器都在运行ios 11.2,所以我仍然无法弄清楚可能导致此问题的原因。
答案 0 :(得分:5)
我解决了这个问题,在视图控制器中将“模拟量度”中的“属性大小”更改为“推断”,将“模拟量”属性更改为“固定”。
我希望这对您有用。
答案 1 :(得分:2)
我遇到了类似的问题,在5.5英寸的屏幕上,拉动刷新效果很好,但是所有其他手机只会显示部分动画,然后再也不会触发刷新。
我发现在refreshControl.didMoveToSuperview()
中为视图控制器调用viewDidAppear
解决了该问题。
如果我理解正确,那么在您设置tableView.refreshControl = refreshControl
时会调用相同的方法,但是需要在实际设置视图时重新计算。我需要进一步挖掘细节以确保细节,但希望暂时对此有所帮助。
答案 2 :(得分:0)
这是我实施的刷新控制代码,仅在3天前在我当前的项目中为我工作。
var refreshControl: UIRefreshControl!
这是我的全局refreshControl
变量,下面是它的实现。
//MARK: - REFRESH CONTROLLER VIEW
refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
refreshControl.addTarget(self, action: #selector(refresh(_ :)), for: UIControlEvents.valueChanged)
refreshControl.attributedTitle = NSAttributedString(string: "")
tblRequest.addSubview(refreshControl)
希望,这适合你! : - )