iOS:implement MaxWidth and MaxHeight

This commit is contained in:
pengfei.zhou 2020-04-03 17:28:55 +08:00 committed by osborn
parent 91787fb0af
commit 870a7e74af
3 changed files with 27 additions and 10 deletions

View File

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

View File

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

View File

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