diff --git a/doric-iOS/Pod/Classes/Shader/DoricLayouts.h b/doric-iOS/Pod/Classes/Shader/DoricLayouts.h index 722adab3..2e61d01e 100644 --- a/doric-iOS/Pod/Classes/Shader/DoricLayouts.h +++ b/doric-iOS/Pod/Classes/Shader/DoricLayouts.h @@ -88,6 +88,10 @@ typedef NS_ENUM(NSInteger, DoricGravity) { @property(nonatomic, assign) BOOL disabled; +@property(nonatomic, assign) CGFloat maxWidth; + +@property(nonatomic, assign) CGFloat maxHeight; + - (instancetype)init; - (void)apply; diff --git a/doric-iOS/Pod/Classes/Shader/DoricLayouts.m b/doric-iOS/Pod/Classes/Shader/DoricLayouts.m index 0b985806..515988f9 100644 --- a/doric-iOS/Pod/Classes/Shader/DoricLayouts.m +++ b/doric-iOS/Pod/Classes/Shader/DoricLayouts.m @@ -63,6 +63,8 @@ - (instancetype)init { if (self = [super init]) { _widthSpec = DoricLayoutJust; _heightSpec = DoricLayoutJust; + _maxWidth = -1; + _maxHeight = -1; } return self; } @@ -91,6 +93,25 @@ - (void)measure:(CGSize)targetSize { [self measureContent:CGSizeMake( self.measuredWidth - self.paddingLeft - self.paddingRight, self.measuredHeight - self.paddingTop - self.paddingBottom)]; + + BOOL needRemeasure = NO; + if (self.maxWidth >= 0) { + if (self.measuredWidth > self.maxWidth) { + self.measuredWidth = self.maxWidth; + needRemeasure = YES; + } + } + if (self.maxHeight > 0) { + if (self.measuredHeight > self.maxHeight) { + self.measuredHeight = self.maxHeight; + needRemeasure = YES; + } + } + if (needRemeasure) { + [self measureContent:CGSizeMake( + self.measuredWidth - self.paddingLeft - self.paddingRight, + self.measuredHeight - self.paddingTop - self.paddingBottom)]; + } self.resolved = YES; } diff --git a/doric-iOS/Pod/Classes/Shader/DoricTextNode.m b/doric-iOS/Pod/Classes/Shader/DoricTextNode.m index 49322146..dcfaee55 100644 --- a/doric-iOS/Pod/Classes/Shader/DoricTextNode.m +++ b/doric-iOS/Pod/Classes/Shader/DoricTextNode.m @@ -26,8 +26,6 @@ #import "Doric.h" @interface DoricTextView : UILabel -@property(nonatomic, assign) CGFloat maxWidth; -@property(nonatomic, assign) CGFloat maxHeight; @end @implementation DoricTextView @@ -50,8 +48,6 @@ @implementation DoricTextNode - (UILabel *)build { return [[[DoricTextView alloc] init] also:^(DoricTextView *it) { it.textAlignment = NSTextAlignmentCenter; - it.maxWidth = -1; - it.maxHeight = -1; }]; } @@ -109,13 +105,9 @@ - (void)blendView:(UILabel *)view forPropName:(NSString *)name propValue:(id)pro } view.font = font; } else if ([name isEqualToString:@"maxWidth"]) { - if ([view isKindOfClass:DoricTextView.class]) { - ((DoricTextView *) view).maxWidth = [prop floatValue]; - } + view.doricLayout.maxWidth = [prop floatValue]; } else if ([name isEqualToString:@"maxHeight"]) { - if ([view isKindOfClass:DoricTextView.class]) { - ((DoricTextView *) view).maxHeight = [prop floatValue]; - } + view.doricLayout.maxHeight = [prop floatValue]; } else if ([name isEqualToString:@"font"]) { NSString *iconfont = prop; UIFont *font = [UIFont fontWithName:iconfont size:view.font.pointSize];