feat:add SwipeLayout

This commit is contained in:
pengfei.zhou 2019-11-26 21:25:23 +08:00
parent deada07e8d
commit 2fbf4602e8
4 changed files with 39 additions and 24 deletions

View File

@ -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 {

View File

@ -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

View File

@ -20,6 +20,7 @@
#import "DoricLayouts.h"
#import <objc/runtime.h>
#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

View File

@ -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
@end