You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by cx...@apache.org on 2017/03/29 12:13:35 UTC
[08/39] incubator-weex git commit: * [ios] fix issue that recycler
can not scroll to header
* [ios] fix issue that recycler can not scroll to header
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/1a370931
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/1a370931
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/1a370931
Branch: refs/heads/0.12-dev
Commit: 1a370931d18091baa10ebc72fe203c3dedf2d9de
Parents: 08930c2
Author: \u9690\u98ce <cx...@apache.org>
Authored: Mon Mar 27 15:28:12 2017 +0800
Committer: \u9690\u98ce <cx...@apache.org>
Committed: Mon Mar 27 15:28:12 2017 +0800
----------------------------------------------------------------------
.../Component/Recycler/WXRecyclerComponent.m | 40 +++++++++++++++++++-
1 file changed, 38 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1a370931/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m
index 073e878..91f3d12 100644
--- a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m
@@ -96,7 +96,7 @@ typedef enum : NSUInteger {
layout.columnWidth = [WXConvert WXLength:attributes[@"columnWidth"] isFloat:YES scaleFactor:scaleFactor] ? : [WXLength lengthWithFloat:0.0 type:WXLengthTypeAuto];
layout.columnCount = [WXConvert WXLength:attributes[@"columnCount"] isFloat:NO scaleFactor:1.0] ? : [WXLength lengthWithInt:1 type:WXLengthTypeFixed];
layout.columnGap = [self _floatValueForColumnGap:([WXConvert WXLength:attributes[@"columnGap"] isFloat:YES scaleFactor:scaleFactor] ? : [WXLength lengthWithFloat:0.0 type:WXLengthTypeNormal])];
-
+
layout.delegate = self;
} else {
_collectionViewlayout = [UICollectionViewLayout new];
@@ -211,7 +211,43 @@ typedef enum : NSUInteger {
- (void)scrollToComponent:(WXComponent *)component withOffset:(CGFloat)offset animated:(BOOL)animated
{
- [super scrollToComponent:component withOffset:offset animated:animated];
+ if (_collectionView.contentSize.height <= _collectionView.frame.size.height) {
+ // can not scroll
+ return;
+ }
+
+ CGPoint contentOffset = _collectionView.contentOffset;
+ CGFloat contentOffsetY = 0;
+
+ CGRect rect;
+ while (component) {
+ if ([component isKindOfClass:[WXCellComponent class]]) {
+ NSIndexPath *toIndexPath = [self.dataController indexPathForCell:component];
+ UICollectionViewLayoutAttributes *attributes = [_collectionView layoutAttributesForItemAtIndexPath:toIndexPath];
+ rect = attributes.frame;
+ break;
+ }
+ if ([component isKindOfClass:[WXHeaderComponent class]]) {
+ NSUInteger toIndex = [self.dataController indexForHeader:component];
+ UICollectionViewLayoutAttributes *attributes = [_collectionView layoutAttributesForSupplementaryElementOfKind:kCollectionSupplementaryViewKindHeader atIndexPath:[NSIndexPath indexPathWithIndex:toIndex]];
+ rect = attributes.frame;
+ break;
+ }
+ contentOffsetY += component.calculatedFrame.origin.y;
+ component = component.supercomponent;
+ }
+
+ contentOffsetY += rect.origin.y;
+ contentOffsetY += offset * self.weexInstance.pixelScaleFactor;
+
+ if (contentOffsetY > _collectionView.contentSize.height - _collectionView.frame.size.height) {
+ contentOffset.y = _collectionView.contentSize.height - _collectionView.frame.size.height;
+ } else {
+ contentOffset.y = contentOffsetY;
+ }
+
+ [_collectionView setContentOffset:contentOffset animated:animated];
+
}
- (void)performUpdatesWithCompletion:(void (^)(BOOL finished))completion