iOS:fix Refreshable

This commit is contained in:
pengfei.zhou 2020-04-08 15:20:38 +08:00 committed by osborn
parent b17ff48c59
commit 5babfb4c9c
3 changed files with 38 additions and 12 deletions

View File

@ -100,7 +100,6 @@ - (void)blendContent {
self.view.contentView = it.view;
}];
}
[self.view.contentView.doricLayout apply:self.view.frame.size];
}
- (void)blendHeader {
@ -137,7 +136,13 @@ - (void)blendHeader {
self.view.headerView = it.view;
}];
}
}
- (void)requestLayout {
[self.view.headerView.doricLayout apply:self.view.frame.size];
self.view.headerView.bottom = 0;
self.view.headerView.centerX = self.view.width / 2;
[self.view.contentView.doricLayout apply:self.view.frame.size];
}
- (void)blendSubNode:(NSDictionary *)subModel {

View File

@ -77,6 +77,14 @@ - (void)setHeaderView:(UIView *)headerView {
self.refreshable = YES;
}
- (void)layoutSubviews {
[super layoutSubviews];
if (self.contentOffset.y != 0) {
return;
}
self.contentSize = self.frame.size;
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (-scrollView.contentOffset.y >= self.headerView.height) {
dispatch_async(dispatch_get_main_queue(), ^{

View File

@ -83,19 +83,25 @@ - (void)apply {
}
- (void)measure:(CGSize)targetSize {
CGFloat width;
CGFloat height;
if (self.widthSpec == DoricLayoutMost) {
self.measuredWidth = targetSize.width;
width = self.measuredWidth = targetSize.width;
} else if (self.widthSpec == DoricLayoutJust) {
width = self.measuredWidth = self.width;
} else {
self.measuredWidth = self.width;
width = targetSize.width;
}
if (self.heightSpec == DoricLayoutMost) {
self.measuredHeight = targetSize.height;
height = self.measuredHeight = targetSize.height;
} else if (self.heightSpec == DoricLayoutJust) {
height = self.measuredHeight = self.height;
} else {
self.measuredHeight = self.height;
height = targetSize.height;
}
[self measureContent:CGSizeMake(
self.measuredWidth - self.paddingLeft - self.paddingRight,
self.measuredHeight - self.paddingTop - self.paddingBottom)];
width - self.paddingLeft - self.paddingRight,
height - self.paddingTop - self.paddingBottom)];
BOOL needRemeasure = NO;
if (self.maxWidth >= 0) {
@ -168,11 +174,19 @@ - (void)setFrame {
[obj.doricLayout setFrame];
}];
}
if (self.view.width != self.measuredWidth) {
self.view.width = self.measuredWidth;
}
if (self.view.height != self.measuredHeight) {
self.view.height = self.measuredHeight;
}
if (self.view.x != self.measuredX) {
self.view.x = self.measuredX;
}
if (self.view.y != self.measuredY) {
self.view.y = self.measuredY;
}
}
- (void)measureUndefinedContent:(CGSize)targetSize {
CGSize measuredSize = [self.view sizeThatFits:targetSize];
@ -193,7 +207,6 @@ - (void)measureUndefinedContent:(CGSize)targetSize {
} else {
self.measuredHeight = measuredSize.height + self.paddingTop + self.paddingBottom;
}
}
}