fix:iOS DoricListNode exception and DoricGroupNode exception

This commit is contained in:
pengfei.zhou 2020-06-22 15:12:00 +08:00 committed by osborn
parent 90a3691362
commit eabb98cee9
3 changed files with 27 additions and 12 deletions

View File

@ -77,7 +77,11 @@ - (void)configChildNodes {
viewNode.viewId = viewId; viewNode.viewId = viewId;
[viewNode initWithSuperNode:self]; [viewNode initWithSuperNode:self];
[viewNode blend:model[@"props"]]; [viewNode blend:model[@"props"]];
if (idx >= childNodes.count) {
[childNodes addObject:viewNode];
} else {
[childNodes insertObject:viewNode atIndex:idx]; [childNodes insertObject:viewNode atIndex:idx];
}
[self.view insertSubview:viewNode.view atIndex:idx]; [self.view insertSubview:viewNode.view atIndex:idx];
} }
} else { } else {
@ -95,9 +99,16 @@ - (void)configChildNodes {
DoricViewNode *reused = childNodes[(NSUInteger) position]; DoricViewNode *reused = childNodes[(NSUInteger) position];
[childNodes removeObjectAtIndex:(NSUInteger) position]; [childNodes removeObjectAtIndex:(NSUInteger) position];
[childNodes removeObjectAtIndex:idx]; [childNodes removeObjectAtIndex:idx];
if (idx >= childNodes.count) {
[childNodes addObject:reused];
} else {
[childNodes insertObject:reused atIndex:idx]; [childNodes insertObject:reused atIndex:idx];
}
if (position >= childNodes.count) {
[childNodes addObject:oldNode];
} else {
[childNodes insertObject:oldNode atIndex:(NSUInteger) position]; [childNodes insertObject:oldNode atIndex:(NSUInteger) position];
}
///View swap index ///View swap index
[reused.view removeFromSuperview]; [reused.view removeFromSuperview];
[oldNode.view removeFromSuperview]; [oldNode.view removeFromSuperview];
@ -109,7 +120,11 @@ - (void)configChildNodes {
viewNode.viewId = viewId; viewNode.viewId = viewId;
[viewNode initWithSuperNode:self]; [viewNode initWithSuperNode:self];
[viewNode blend:model[@"props"]]; [viewNode blend:model[@"props"]];
if (idx >= childNodes.count) {
[childNodes addObject:viewNode];
} else {
[childNodes insertObject:viewNode atIndex:idx]; [childNodes insertObject:viewNode atIndex:idx];
}
[self.view insertSubview:viewNode.view atIndex:idx]; [self.view insertSubview:viewNode.view atIndex:idx];
} }
} }
@ -123,7 +138,11 @@ - (void)configChildNodes {
viewNode.viewId = viewId; viewNode.viewId = viewId;
[viewNode initWithSuperNode:self]; [viewNode initWithSuperNode:self];
[viewNode blend:model[@"props"]]; [viewNode blend:model[@"props"]];
if (idx >= childNodes.count) {
[childNodes addObject:viewNode];
} else {
[childNodes insertObject:viewNode atIndex:idx]; [childNodes insertObject:viewNode atIndex:idx];
}
[self.view insertSubview:viewNode.view atIndex:idx]; [self.view insertSubview:viewNode.view atIndex:idx];
} }
} }

View File

@ -34,9 +34,4 @@ - (void)initWithSuperNode:(DoricSuperNode *)superNode {
[super initWithSuperNode:superNode]; [super initWithSuperNode:superNode];
self.reusable = YES; self.reusable = YES;
} }
- (void)requestLayout {
[self.view.doricLayout apply];
[super requestLayout];
}
@end @end

View File

@ -145,6 +145,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
DoricListItemNode *node = cell.doricListItemNode; DoricListItemNode *node = cell.doricListItemNode;
node.viewId = model[@"id"]; node.viewId = model[@"id"];
[node blend:props]; [node blend:props];
[node.view.doricLayout apply:CGSizeMake(tableView.width, tableView.height)];
[node requestLayout]; [node requestLayout];
[self callItem:position height:node.view.height]; [self callItem:position height:node.view.height];
return cell; return cell;
@ -220,7 +221,7 @@ - (void)blendSubNode:(NSDictionary *)subModel {
- (void)callItem:(NSUInteger)position height:(CGFloat)height { - (void)callItem:(NSUInteger)position height:(CGFloat)height {
NSNumber *old = self.itemHeights[@(position)]; NSNumber *old = self.itemHeights[@(position)];
if (old && old.floatValue == height) { if (old && [old isEqualToNumber:@(height)]) {
return; return;
} }
self.itemHeights[@(position)] = @(height); self.itemHeights[@(position)] = @(height);