UIScrollView中添加的UIRefreshControl永远不会显示

11

出于多种原因,我决定在我的应用程序中使用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(“卡片”)。然后,根据所有卡片的总高度更改 UIScrollView 的 contentSize。卡片被完美地添加,并且滚动视图的表现符合预期,但与 UIRefreshControl 有关。

非常感谢您的帮助!

1个回答

18

编辑:
经过一些尝试,我找到了另一种解决方案,可以使滚动视图在内容大小小于滚动视图高度时仍然可以滚动(并触发刷新控件)。只需将alwaysBounceVertical属性设置为true即可:

self.scroll.alwaysBounceVertical = true

旧回答:
为了使其正常工作,您的内容大小应大于滚动视图的高度。更改此行:

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

To:

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

这样可以让您的RefreshControl生效。

或者,在您的例子中,您应该计算卡片的高度,然后将其设置为contentSize的高度。


设置 alwaysBounceVertical 似乎对我不起作用 :/ - Connor Hicks
1
我刚刚复制了你的代码,添加了alwaysBounceVertical属性,现在它可以正常工作了.. :/ - donnywals
我没有,我只有一个简单的viewController。我猜想刷新控件可能在导航栏下面。你的内容不在导航栏下面吗? - donnywals
不,该内容不包含在导航栏中。视图控制器嵌入了一个导航控制器,该控制器提供导航栏。 - Connor Hicks
我使用了一个navigationController测试了你的代码。它仍然可以正常工作。我将我的演示代码添加到了github上,链接为https://github.com/donnywals/RefreshControl。 - donnywals
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接