gpt4 book ai didi

ios - 最后一个 UITableViewCell 中的 UICollectionView 和一致的滚动?如何?

转载 作者:技术小花猫 更新时间:2023-10-29 11:23:04 25 4
gpt4 key购买 nike

我正在为这个问题绞尽脑汁,我知道这一定是可能的,但在仔细阅读了所有文档之后,我仍然无法想出一些行之有效的方法。

基本上,我在 UITableView 的最后一个单元格中有一个 UICollectionView。我想要发生的是,只有当 UITableView 完全滚动到底部时,最后一个单元格中的 UICollectionView 才能开始滚动。而且,如果在拖动/平移期间 TableView 偏移量到达 CollectionView 的 tableviewcell 的底部,则当前 TableView 拖动/平移的任何额外拖动都应该影响 Collection View 而不是 TableView 。

此外,当 Collection View 滚动时,如果用户开始在 Collection View 上滚动,如果 Collection View 到达其滚动的顶部(内容 Y 偏移量为 0 或更小),并且当前平移/影响中的拖动手势应该导致包含的 TableView 向上滚动。

我想要实现这种效果的原因是因为包含 Collection View 的最后一个单元格上方的表格 View 单元格包含一个切换 UICollectionView 内容的 UISegmentControl,我希望用户能够切换此段在 CollectionView 中滚动时的任何时间。这意味着 Collection View 必须滚动,但父 TableView 不需要滚动。

我试过玩手势识别器,并用

– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

这让我走到了一半,如果 Collection View 要滚动到一个负偏移量(超过它的顶部偏移量)或者如果 TableView 已经到达它的末尾,我可以使用一个标志来返回是/否到这个方法总滚动.. 我有点接近我想要实现的目标,但是如果我在 Collection View 上缓慢向上滚动,它不会触发同步识别器,如果我在表格 View 上向下滚动太慢,也会发生同样的情况。

另一个问题是,我不希望 Collection View 反弹。但是,将 bounces 设置为 NO 会完全阻止同步识别器触发。我什至尝试在 viewDidScroll 的 Collection View 上将内容偏移量设置为 CGPointZero,如果它的 y 偏移量低于零。这也不起作用,并且会阻止同步方法触发...

有人知道该怎么办吗?或者能给我指明正确方向的东西?

更新-

我仍在努力,但在实现我想要实现的行为方面进展甚微。我已经在 viewDidScroll 方法中切换 userInteractionEnabled,就像我在 willBeginDragging 中尝试过的那样。与 scrollEnabled 属性相同.. 运气不好 :( 我得到的行为与我想要的类似,但是在用户离开屏幕并尝试再次滚动之前,父 View 不会向上滚动..

更新 -

在滚动过程中是否有转换当前处理滚动事件的 panGestureRecognizer?如果我可以在仍然滚动的同时将滚动处理程序从子级转换到父级,这将解决我的问题。我查看了苹果的手势相关文档和 uiscrollview 相关文档,但找不到任何接近这样做的内容。

更新-

刚刚完成了这样的尝试..

- (CGPoint)maxParentContentOffset
{
return CGPointMake(0, self.parentScrollView.contentSize.height - self.frame.size.height - 44);
}

- (void)parentScrollViewDidScroll:(UIScrollView *)parentScrollView
{
if (self.contentOffset.y > 0) {
self.parentScrollView.contentOffset = [self maxParentContentOffset];
}
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y < 0) {
scrollView.contentOffset = CGPointZero;
}
}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
CGPoint translation = [scrollView.panGestureRecognizer velocityInView:scrollView.superview];
if (translation.y < 0) {
[UIView animateWithDuration:0.5f animations:^(void) {
self.parentScrollView.contentOffset = [self maxParentContentOffset];
}];
}
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}

但是有一个问题......由于某种原因,我在以下方法中不断收到错误的访问错误

- (void)parentScrollViewDidScroll:(UIScrollView *)parentScrollView
{
if (self.contentOffset.y > 0) {
self.parentScrollView.contentOffset = [self maxParentContentOffset];
}
}

具体设置内容偏移量。这真的很奇怪,因为有了断点,我看到 parentScrollView 和 self 被设置了。我想知道这是否不是一个糟糕的访问,但由于某种原因它陷入了无限循环?有什么想法吗?

最佳答案

即使您现在可以设法使其工作,将 Collection View 嵌入到 TableView (UIScrollView 子类)中也不是一个好主意,一旦苹果修改其实现,它就会出现错误.

尝试迁移到单个 UICollectionView 布局。毕竟,使用 TableView 可以实现的 Collection View ,没有什么是您无法实现的。


将“ TableView ”和“ Collection View ”分成两个(或更多) Collection View 部分,然后根据 indexPath.section 以不同方式实现 layoutAttributesForItemAtIndexPath:

要使其看起来像 TableView ,您需要返回其 width 与 Collection View 相同的帧。

如果您的布局更简单,那么您可以使用 UICollectionViewFlowLayout(也许您已经是)并实现 collectionView:layout:sizeForItemAtIndexPath: 如上所述。

关于ios - 最后一个 UITableViewCell 中的 UICollectionView 和一致的滚动?如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24579224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com