从未显示添加到UIScrollView的UIRefreshControl

时间:2015-05-26 17:20:18

标签: ios swift uiscrollview uirefreshcontrol

由于种种原因,我决定在我的应用中使用UIScrollView而不是UITableView。当我使用UITableView时,我能够添加UIRefreshControl,没有任何问题。但是,当我在UIScrollView上使用相同的代码时,没有任何反应。我已经尝试了几个第三方进修库,似乎都没有。任何帮助表示赞赏。

来源:

var scroll: UIScrollView!
var refreshControl: UIRefreshControl!

override func viewDidLoad()
{
    super.viewDidLoad()

    self.scroll = UIScrollView(frame: self.view.frame)
    self.scroll.contentSize = CGSize(width: self.view.bounds.width, height: 10)

    self.refreshControl = UIRefreshControl()
    self.refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
    //self.refreshControl.addTarget(self, action: "loadPostsIntoCards", forControlEvents: UIControlEvents.ValueChanged)
    self.scroll.addSubview(self.refreshControl)

    self.view.addSubview(self.scroll)

    //self.loadPostsIntoCards()
}

loadPostsIntoCards方法执行我的API调用,并创建添加到UIScrollView的UIViews(" cards")。然后,我根据所有卡的总高度更改UIScrollView的contentSize。卡片添加完美,滚动视图按预期运行,但UIRefreshControl除外。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:15)

修改
在一些鬼混之后,我发现另一个解决方案,即使当contentSize小于scrollView高度时,滚动视图也会滚动(并触发刷新控件)。只需将alwaysBounceVertical属性设置为true:

self.scroll.alwaysBounceVertical = true
老人的回答:
您的内容大小应该大于滚动视图的高度,以使其工作。改变这一行:

self.scroll.contentSize = CGSize(width: self.view.bounds.width, height: 10)

要:

self.scroll.contentSize = CGSize(width: self.view.bounds.width, height: self.view.bounds.height+1)

这将允许您的RefreshControl启动。

或者,在您的情况下,您应该计算卡片的高度,然后将其设置为contentSize的高度。