diff --git a/iOS/Pod/Classes/Refresh/DoricRefreshableNode.m b/iOS/Pod/Classes/Refresh/DoricRefreshableNode.m index 3406fcb1..1b9c3c90 100644 --- a/iOS/Pod/Classes/Refresh/DoricRefreshableNode.m +++ b/iOS/Pod/Classes/Refresh/DoricRefreshableNode.m @@ -48,6 +48,19 @@ - (void)blend:(NSDictionary *)props { [super blend:props]; [self blendHeader]; [self blendContent]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self.view also:^(DoricSwipeRefreshLayout *layout) { + [layout layoutSelf]; + [layout.contentView also:^(UIView *it) { + it.x = it.y = 0; + }]; + [layout.headerView also:^(UIView *it) { + it.bottom = 0; + it.centerX = layout.width / 2; + }]; + layout.contentSize = layout.frame.size; + }]; + }); } - (void)blendContent { diff --git a/iOS/Pod/Classes/Refresh/DoricSwipeRefreshLayout.m b/iOS/Pod/Classes/Refresh/DoricSwipeRefreshLayout.m index bc6f28a0..868be55b 100644 --- a/iOS/Pod/Classes/Refresh/DoricSwipeRefreshLayout.m +++ b/iOS/Pod/Classes/Refresh/DoricSwipeRefreshLayout.m @@ -17,6 +17,7 @@ - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.showsHorizontalScrollIndicator = NO; self.showsVerticalScrollIndicator = NO; + self.alwaysBounceVertical = YES; self.delegate = self; } return self; @@ -26,6 +27,7 @@ - (instancetype)init { if (self = [super init]) { self.showsHorizontalScrollIndicator = NO; self.showsVerticalScrollIndicator = NO; + self.alwaysBounceVertical = YES; self.delegate = self; } return self; @@ -58,16 +60,6 @@ - (void)setHeaderView:(UIView *)headerView { - (void)layoutSubviews { [super layoutSubviews]; - [self layoutSelf]; - [self.contentView also:^(UIView *it) { - [it layoutSubviews]; - it.x = it.y = 0; - }]; - [self.headerView also:^(UIView *it) { - [it layoutSubviews]; - it.bottom = it.centerX = 0; - }]; - self.contentSize = self.frame.size; } - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { @@ -115,4 +107,8 @@ - (void)setRefreshable:(BOOL)refreshable { - (BOOL)refreshable { return self.scrollEnabled; } + +- (void)setContentSize:(CGSize)contentSize { + [super setContentSize:contentSize]; +} @end diff --git a/iOS/Pod/Classes/Shader/DoricLayouts.m b/iOS/Pod/Classes/Shader/DoricLayouts.m index 776a2802..53bf0d7b 100644 --- a/iOS/Pod/Classes/Shader/DoricLayouts.m +++ b/iOS/Pod/Classes/Shader/DoricLayouts.m @@ -20,6 +20,7 @@ #import "DoricLayouts.h" #import #import "UIView+Doric.h" +#import "Doric.h" DoricMargin DoricMarginMake(CGFloat left, CGFloat top, CGFloat right, CGFloat bottom) { DoricMargin margin; @@ -537,6 +538,13 @@ - (void)layoutSelf { } else if (self.layoutConfig.heightSpec == DoricLayoutWrapContent) { self.height = contentSize.height; } + [self.subviews forEach:^(__kindof UIView *obj) { + if ([obj isKindOfClass:[DoricLayoutContainer class]]) { + [obj layoutSubviews]; + } else { + [obj layoutSelf]; + } + }]; } @end diff --git a/iOS/Pod/Classes/Shader/DoricScrollerNode.m b/iOS/Pod/Classes/Shader/DoricScrollerNode.m index 3cf29c4a..d053566e 100644 --- a/iOS/Pod/Classes/Shader/DoricScrollerNode.m +++ b/iOS/Pod/Classes/Shader/DoricScrollerNode.m @@ -32,12 +32,6 @@ - (void)setContentView:(UIView *)contentView { [self addSubview:contentView]; } -- (void)layoutSubviews { - [super layoutSubviews]; - [self layoutSelf]; - [self.contentView layoutSubviews]; -} - - (CGSize)sizeThatFits:(CGSize)size { if (self.contentView) { CGSize childSize = [self.contentView sizeThatFits:size]; @@ -92,15 +86,19 @@ - (void)blend:(NSDictionary *)props { self.view.contentView = it.view; }]; } - [self.view also:^(DoricScrollView *it) { - if (it.contentView) { - CGSize size = [it.contentView sizeThatFits:it.frame.size]; - [it setContentSize:size]; - } - }]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self.view also:^(DoricScrollView *it) { + [it layoutSelf]; + if (it.contentView) { + CGSize size = [it.contentView sizeThatFits:it.frame.size]; + [it setContentSize:size]; + } + [it layoutSelf]; + }]; + }); } -- (void)blendView:(UIScrollView *)view forPropName:(NSString *)name propValue:(id)prop { +- (void)blendView:(DoricScrollView *)view forPropName:(NSString *)name propValue:(id)prop { if ([@"content" isEqualToString:name]) { self.childViewId = prop; } else { @@ -111,4 +109,4 @@ - (void)blendView:(UIScrollView *)view forPropName:(NSString *)name propValue:(i - (void)blendSubNode:(NSDictionary *)subModel { [self.childNode blend:subModel[@"props"]]; } -@end \ No newline at end of file +@end