feat:step3:scrollview

This commit is contained in:
pengfei.zhou 2019-11-27 16:04:43 +08:00
parent af8a455d46
commit 1dabccbe50
4 changed files with 20 additions and 10 deletions

View File

@ -35,12 +35,16 @@ - (instancetype)init {
- (CGSize)sizeThatFits:(CGSize)size {
if (self.contentView) {
CGSize childSize = [self.contentView sizeThatFits:size];
return CGSizeMake(MIN(size.width, childSize.width), MIN(size.height, childSize.height));
return [self.contentView measureSize:size];
}
return CGSizeZero;
}
- (void)layoutSelf:(CGSize)targetSize {
[super layoutSelf:targetSize];
[self.contentView layoutSelf:targetSize];
}
- (void)setContentView:(UIView *)contentView {
if (_contentView) {
[_contentView removeFromSuperview];
@ -58,9 +62,6 @@ - (void)setHeaderView:(UIView *)headerView {
self.refreshable = YES;
}
- (void)layoutSubviews {
[super layoutSubviews];
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (-scrollView.contentOffset.y >= self.headerView.height) {

View File

@ -94,7 +94,7 @@ - (CGSize)measureSize:(CGSize)targetSize {
* layout self and subviews
* */
- (void)layoutSelf:(CGSize)targetSize {
CGSize contentSize = [self measureSize:targetSize];
CGSize contentSize = [self sizeThatFits:targetSize];
if (self.layoutConfig.widthSpec == DoricLayoutAtMost) {
self.width = targetSize.width;
} else if (self.layoutConfig.widthSpec == DoricLayoutWrapContent) {
@ -108,8 +108,7 @@ - (void)layoutSelf:(CGSize)targetSize {
}
- (BOOL)requestSuperview {
return self.superview
&& self.layoutConfig
return self.layoutConfig
&& self.layoutConfig.widthSpec != DoricLayoutExact
&& self.layoutConfig.heightSpec != DoricLayoutExact;
}

View File

@ -48,6 +48,11 @@ - (CGSize)sizeThatFits:(CGSize)size {
}
return size;
}
- (void)layoutSelf:(CGSize)targetSize {
[super layoutSelf:targetSize];
[self reloadData];
}
@end

View File

@ -34,11 +34,16 @@ - (void)setContentView:(UIView *)contentView {
- (CGSize)sizeThatFits:(CGSize)size {
if (self.contentView) {
CGSize childSize = [self.contentView sizeThatFits:size];
return CGSizeMake(MIN(size.width, childSize.width), MIN(size.height, childSize.height));
return [self.contentView sizeThatFits:size];
}
return CGSizeZero;
}
- (void)layoutSelf:(CGSize)targetSize {
[super layoutSelf:targetSize];
[self.contentView layoutSelf: [self.contentView sizeThatFits:targetSize]];
[self setContentSize:self.contentView.frame.size];
}
@end
@interface DoricScrollerNode ()