我正在尝试UIRefreshControl在我的项目中实现一个UICollectionView.它按预期工作,但我需要拉动它旋转时UICollectionView的高度约3倍refreshControl(一旦用户放手).我见过其他应用程序,你只需要将它拉到refreshControl它旋转的高度.如何更改需要下拉的金额?
码:
(void)viewDidLoad {
[super viewDidLoad];
[self.collectionView setBackgroundColor:[UIColor clearColor]];
self.refreshControl = [UIRefreshControl new];
[self.refreshControl addTarget:self action:@selector(refreshFavorites) forControlEvents:UIControlEventValueChanged];
[self.collectionView addSubview:self.refreshControl];
self.collectionView.alwaysBounceVertical = YES;
}
Run Code Online (Sandbox Code Playgroud)
随附图片,以帮助想象我的意思.我collectionView有一排(纯红色).红色和空间之间的空间refreshControl只是我拉下来试图激活的空间refreshControl.
在这张图片中,我几乎已经启动了控制,我已经在屏幕上拉下了相当多的数量.

在这个图像中,我已经激活了控件,它开始加载(在它跳转~20-30像素之后,但它仍然突出显示这是多么重要)

此图像显示控件在激活并处于动画状态后处于"静止"状态.

我已经尝试设置框架UIRefreshControl以尝试控制高度,但这不起作用.我也改变了大小collectionView:layout:sizeForItemAtIndexPath没有帮助.
BB9*_*B9z 21
如果需要将UIRefreshControl拉得太远而无法触发,则可能是iOS SDK的错误.
我建议使用视图控制器的帮助来解决这种情况:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// Force update the snapping height of refresh control.
[self.refreshControl didMoveToSuperview];
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您不介意使用私有API并需要更准确的控制,您可以这样写:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
@try {
[self.refreshControl setValue:@(60) forKey:@"_snappingHeight"];
}
@catch (NSException *exception) {
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于iOS 7-10.没有App Store审核问题.
看看里面
UIRefreshControl有一个名为snappingHeight的属性.此属性控制用户需要拉下的距离.但遗憾的是,此值始终未正确设置,尤其是您具有自定义视图层次结构.
UIRefreshControl有一个私有方法调用_updateSnappingHeight,这个方法也调用了didMoveToSuperview.因此,手动didMoveToSuperview调用可以更新错误的捕捉值.
对于仍在寻找答案的人们。到目前为止,我有一个明确和最好的答案......
快速 3:
内部 viewDidLoad() :
self.refresher = UIRefreshControl()
self.refresher.tintColor = UIColor.red
self.scrollView.addSubview(self.refresher)
Run Code Online (Sandbox Code Playgroud)
Next 如果你的 View 是一个 ViewController - 像这样实现 ScrollViewDelegate:
class YourViewController: UIViewController, UIScrollViewDelegate
Run Code Online (Sandbox Code Playgroud)
一旦你有你的 scrollView @IBoulet 链接......继续并在 viewDidLoad() 中将 scrollView 委托设置为 self ,如下所示:
self.scrollView.delegate = self
Run Code Online (Sandbox Code Playgroud)
接下来,由于您已经设置了委托,请设置 scrollViewDidScroll 函数并实现它,以检查下拉的人是否通过 -90 像这样:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView == self.scrollView
{
if scrollView.contentOffset.y < -90 && !self.refresher.isRefreshing{
self.refresher.beginRefreshing()
self.Refresh()
print("zz refreshing")
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,请注意我们没有
self.refresher.addTarget(self, action: #selector(self.Refresh()), for: UIControlEvents.valueChanged)
Run Code Online (Sandbox Code Playgroud)
我们也根本不需要它。相反,我们先调用 beginRefresh(),然后调用实际的函数...只要确保在您希望它结束的地方调用endRefresh()。
| 归档时间: |
|
| 查看次数: |
2683 次 |
| 最近记录: |