iOS: DoricLayout fix code error
This commit is contained in:
parent
7749ea2ea2
commit
8fbbaa7f56
@ -130,6 +130,7 @@ @interface DoricLayout ()
|
||||
* 0xff--ff
|
||||
* */
|
||||
@property(nonatomic, assign) NSUInteger measuredState;
|
||||
@property(nonatomic, strong) NSMutableDictionary *measuredCache;
|
||||
@end
|
||||
|
||||
@implementation DoricLayout
|
||||
@ -142,6 +143,7 @@ - (instancetype)init {
|
||||
_minWidth = -1;
|
||||
_minHeight = -1;
|
||||
_measuredState = 0;
|
||||
_measuredCache = [NSMutableDictionary new];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@ -166,11 +168,36 @@ - (void)apply {
|
||||
}
|
||||
|
||||
- (void)measure:(CGSize)targetSize {
|
||||
[self measureWidth:DoricMeasureSpecMake(DoricMeasureExactly, targetSize.width)
|
||||
height:DoricMeasureSpecMake(DoricMeasureExactly, targetSize.height)];
|
||||
[self doMeasure:targetSize];
|
||||
[self layout];
|
||||
}
|
||||
|
||||
- (DoricMeasureSpec)getRootMeasureSpec:(CGFloat)targetSize
|
||||
layoutSpec:(DoricLayoutSpec)spec
|
||||
size:(CGFloat)size {
|
||||
|
||||
switch (spec) {
|
||||
case DoricLayoutMost:
|
||||
return DoricMeasureSpecMake(DoricMeasureExactly, targetSize);
|
||||
case DoricLayoutFit:
|
||||
return DoricMeasureSpecMake(DoricMeasureAtMost, targetSize);
|
||||
default:
|
||||
return DoricMeasureSpecMake(DoricMeasureExactly, size);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
- (void)doMeasure:(CGSize)targetSize {
|
||||
DoricMeasureSpec widthSpec = [self getRootMeasureSpec:targetSize.width
|
||||
layoutSpec:self.widthSpec
|
||||
size:self.width];
|
||||
DoricMeasureSpec heightSpec = [self getRootMeasureSpec:targetSize.height
|
||||
layoutSpec:self.heightSpec
|
||||
size:self.height];
|
||||
[self measureWidth:widthSpec
|
||||
height:heightSpec];
|
||||
}
|
||||
|
||||
#pragma helper
|
||||
|
||||
- (CGFloat)takenWidth {
|
||||
@ -424,6 +451,20 @@ - (void)forceUniformHeight:(DoricMeasureSpec)widthMeasureSpec {
|
||||
}
|
||||
|
||||
- (void)measureWidth:(DoricMeasureSpec)widthSpec height:(DoricMeasureSpec)heightSpec {
|
||||
// NSString *measuredKey = [NSString stringWithFormat:@"%@;%@;%@;%@",
|
||||
// @(widthSpec.mode), @(widthSpec.size),
|
||||
// @(heightSpec.mode), @(heightSpec.size)];
|
||||
//
|
||||
// NSString *cached = self.measuredCache[measuredKey];
|
||||
// if (cached) {
|
||||
// NSArray <NSString *> *nums = [cached componentsSeparatedByString:@":"];
|
||||
// if (nums.count == 2) {
|
||||
// self.measuredWidth = nums[0].floatValue;
|
||||
// self.measuredHeight = nums[1].floatValue;
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
|
||||
switch (self.layoutType) {
|
||||
case DoricStack: {
|
||||
[self stackMeasureWidth:widthSpec height:heightSpec];
|
||||
@ -442,6 +483,10 @@ - (void)measureWidth:(DoricMeasureSpec)widthSpec height:(DoricMeasureSpec)height
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// self.measuredCache[measuredKey] = [NSString stringWithFormat:@"%@;%@",
|
||||
// @(self.measuredWidth),
|
||||
// @(self.measuredHeight)];
|
||||
}
|
||||
|
||||
- (void)verticalMeasureWidth:(DoricMeasureSpec)widthMeasureSpec
|
||||
@ -734,7 +779,7 @@ - (void)horizontalMeasureWidth:(DoricMeasureSpec)widthMeasureSpec
|
||||
childLayout.width = oldWidth;
|
||||
}
|
||||
|
||||
CGFloat childWidth = childLayout.measuredHeight;
|
||||
CGFloat childWidth = childLayout.measuredWidth;
|
||||
if (isExactly) {
|
||||
totalLength += childWidth + childLayout.marginLeft + childLayout.marginRight;
|
||||
} else {
|
||||
@ -986,13 +1031,16 @@ - (void)stackMeasureWidth:(DoricMeasureSpec)widthMeasureSpec
|
||||
|
||||
- (void)undefinedMeasureWidth:(DoricMeasureSpec)widthMeasureSpec
|
||||
height:(DoricMeasureSpec)heightMeasureSpec {
|
||||
CGSize targetSize = CGSizeMake(widthMeasureSpec.size, heightMeasureSpec.size);
|
||||
CGSize targetSize = CGSizeMake(widthMeasureSpec.size - self.paddingLeft - self.paddingRight,
|
||||
heightMeasureSpec.size - self.paddingTop - self.paddingBottom);
|
||||
//TODO should check this
|
||||
CGSize measuredSize = [self.view sizeThatFits:targetSize];
|
||||
DoricSizeAndState widthSizeAndState = [self resolveSizeAndState:measuredSize.width
|
||||
+ self.paddingLeft + self.paddingRight
|
||||
spec:widthMeasureSpec
|
||||
childMeasuredState:0];
|
||||
DoricSizeAndState heightSizeAndState = [self resolveSizeAndState:measuredSize.height
|
||||
+ self.paddingTop + self.paddingBottom
|
||||
spec:heightMeasureSpec
|
||||
childMeasuredState:0];
|
||||
self.measuredWidth = widthSizeAndState.size;
|
||||
|
Reference in New Issue
Block a user