Skip to content

Commit caaa761

Browse files
author
@欧柏泉
committed
V1.2.1版本发布
1 parent 2e5e950 commit caaa761

14 files changed

+344
-329
lines changed

MyLayout.podspec

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Pod::Spec.new do |s|
1616
#
1717

1818
s.name = "MyLayout"
19-
s.version = "1.2.0"
19+
s.version = "1.2.1"
2020
s.summary = "A powerful iOS view layout library, suitable for all kinds of screen size. Don't need to learn AutoLayout and SizeClass. "
2121

2222
s.description = <<-DESC
@@ -79,7 +79,7 @@ Pod::Spec.new do |s|
7979
# Supports git, hg, bzr, svn and HTTP.
8080
#
8181

82-
s.source = { :git => "https://github.com/youngsoft/MyLinearLayout.git", :tag => "1.2.0" }
82+
s.source = { :git => "https://github.com/youngsoft/MyLinearLayout.git", :tag => "1.2.1" }
8383

8484

8585
# ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #

MyLayout.xcodeproj/project.pbxproj

+8-8
Original file line numberDiff line numberDiff line change
@@ -715,15 +715,15 @@
715715
isa = XCBuildConfiguration;
716716
buildSettings = {
717717
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
718-
CODE_SIGN_IDENTITY = "iPhone Developer";
719-
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
718+
CODE_SIGN_IDENTITY = "iPhone Developer: haitao Wu (CHDJFSQBY5)";
719+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: haitao Wu (CHDJFSQBY5)";
720720
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
721721
INFOPLIST_FILE = "$(SRCROOT)/MyLayout/Info.plist";
722722
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
723723
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
724-
PRODUCT_BUNDLE_IDENTIFIER = com.jimubox.MyLayout;
724+
PRODUCT_BUNDLE_IDENTIFIER = com.jimubox.jimustock;
725725
PRODUCT_NAME = MyLayout;
726-
PROVISIONING_PROFILE = "045a085a-bca1-4873-8f6f-0890ebce7583";
726+
PROVISIONING_PROFILE = "4a19cd88-d80b-4601-9cb5-4b6bd4cd06dc";
727727
TARGETED_DEVICE_FAMILY = "1,2";
728728
};
729729
name = Debug;
@@ -732,15 +732,15 @@
732732
isa = XCBuildConfiguration;
733733
buildSettings = {
734734
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
735-
CODE_SIGN_IDENTITY = "iPhone Developer";
736-
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
735+
CODE_SIGN_IDENTITY = "iPhone Developer: haitao Wu (CHDJFSQBY5)";
736+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: haitao Wu (CHDJFSQBY5)";
737737
GCC_PREPROCESSOR_DEFINITIONS = "";
738738
INFOPLIST_FILE = "$(SRCROOT)/MyLayout/Info.plist";
739739
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
740740
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
741-
PRODUCT_BUNDLE_IDENTIFIER = com.jimubox.MyLayout;
741+
PRODUCT_BUNDLE_IDENTIFIER = com.jimubox.jimustock;
742742
PRODUCT_NAME = MyLayout;
743-
PROVISIONING_PROFILE = "045a085a-bca1-4873-8f6f-0890ebce7583";
743+
PROVISIONING_PROFILE = "4a19cd88-d80b-4601-9cb5-4b6bd4cd06dc";
744744
TARGETED_DEVICE_FAMILY = "1,2";
745745
};
746746
name = Release;

MyLayout/FLTest2ViewController.m

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ -(void)loadView
5050
headImage.layer.cornerRadius = 4;
5151
headImage.layer.borderWidth = 1;
5252
headImage.backgroundColor = [UIColor whiteColor];
53-
headImage.heightDime.equalTo(rootLayout.heightDime).multiply(0.3); //高度是父布局高度1/3
54-
headImage.widthDime.equalTo(headImage.heightDime); //宽度和高度相等。
53+
headImage.heightDime.equalTo(rootLayout.heightDime).multiply(1.0/3); //高度是父布局高度1/3
54+
headImage.widthDime.equalTo(headImage.heightDime); //宽度等于高度
5555
headImage.marginGravity = MyMarginGravity_Center; //整体在父布局中居中。
5656
[rootLayout addSubview:headImage];
5757

MyLayout/Lib/MyBaseLayout.h

+7-7
Original file line numberDiff line numberDiff line change
@@ -199,13 +199,13 @@
199199
全部简写为ALL,不支持为-,
200200
201201
定义A为操作的视图本身,B为A的兄弟视图,P为A的父视图。
202-
+-------------+----------+-------------+--------------+------------+--------------+---------------+--------------+----------------------+
203-
| 对象 \ 值 | NSNumber |A.widthDime |A.heightDime |B.widthDime | B.heightDime | P.widthDime|P.heightDime |NSArray<MyLayoutDime*>|
204-
+-------------+----------+-------------+--------------+------------+--------------+---------------+--------------+----------------------+
205-
|A.widthDime | ALL |ALL |FR/R/FL-H/FO |FR/R/FO | R |L/FR/R/FL/FO | R |R |
206-
+-------------+----------+-------------+--------------+------------+--------------+---------------+--------------+----------------------+
207-
|A.heightDime | ALL |FR/R/FL-V/FO |ALL |R |FR/R/FO |R |L/FR/R/FL/FO |R |
208-
+-------------+----------+-------------+--------------+------------+--------------+---------------+--------------+----------------------+
202+
+-------------+----------+------------------+--------------+------------+--------------+---------------+--------------+----------------------+
203+
| 对象 \ 值 | NSNumber |A.widthDime |A.heightDime |B.widthDime | B.heightDime | P.widthDime |P.heightDime |NSArray<MyLayoutDime*>|
204+
+-------------+----------+------------------+--------------+------------+--------------+---------------+--------------+----------------------+
205+
|A.widthDime | ALL |ALL |FR/R/FL-H/FO |FR/R/FO | R |L/FR/R/FL/FO | R |R |
206+
+-------------+----------+------------------+--------------+------------+--------------+---------------+--------------+----------------------+
207+
|A.heightDime | ALL |FR/R/FL-V/FO/L-V |ALL |R |FR/R/FO |R |L/FR/R/FL/FO |R |
208+
+-------------+----------+------------------+--------------+------------+--------------+---------------+--------------+----------------------+
209209
210210
上表中所有的布局尺寸的值都支持设置为数值,而且所有布局下的子视图的宽度和高度尺寸都可以设置为等于自身的宽度和高度尺寸,布局库这里做了特殊处理,是不会造成循环引用的。比如:
211211
A.widthDime.equalTo(A.widthDime),支持这种设置的原因是有时候比如希望某个UILabel的宽度是在其本身内容宽度的基础上再添加一个增加值,这时候就可以设置如下:

MyLayout/Lib/MyBaseLayout.m

+25-19
Original file line numberDiff line numberDiff line change
@@ -1469,11 +1469,10 @@ -(void)layoutSubviews
14691469
}
14701470

14711471
if (self.endLayoutBlock != nil)
1472-
{
14731472
self.endLayoutBlock();
1474-
self.beginLayoutBlock = nil;
1475-
self.endLayoutBlock = nil;
1476-
}
1473+
1474+
self.beginLayoutBlock = nil;
1475+
self.endLayoutBlock = nil;
14771476
}
14781477

14791478

@@ -1531,7 +1530,7 @@ -(void)vertGravity:(MyMarginGravity)vert
15311530
{
15321531

15331532
pRect->origin.y = self.padding.top + topMargin;
1534-
pRect->size.height = [self validMeasure:sbv.heightDime sbv:sbv calcSize:selfSize.height - self.padding.bottom - bottomMargin - pRect->origin.y sbvSize:pRect->size selfLayoutSize:selfSize];
1533+
pRect->size.height = [self validMeasure:sbv.heightDime sbv:sbv calcSize:selfSize.height - fixedHeight - bottomMargin - topMargin sbvSize:pRect->size selfLayoutSize:selfSize];
15351534
}
15361535
else if (vert == MyMarginGravity_Vert_Center)
15371536
{
@@ -1543,9 +1542,7 @@ -(void)vertGravity:(MyMarginGravity)vert
15431542
if (self.window != nil)
15441543
{
15451544
pRect->origin.y = (self.window.frame.size.height - topMargin - bottomMargin - pRect->size.height)/2 + topMargin + centerMargin;
1546-
1547-
CGPoint pt = pRect->origin;
1548-
pRect->origin.y = [self.window convertPoint:pt toView:self].y;
1545+
pRect->origin.y = [self.window convertPoint:pRect->origin toView:self].y;
15491546
}
15501547

15511548
}
@@ -1554,10 +1551,6 @@ -(void)vertGravity:(MyMarginGravity)vert
15541551

15551552
pRect->origin.y = selfSize.height - self.padding.bottom - bottomMargin - pRect->size.height;
15561553
}
1557-
else if (vert == MyMarginGravity_Vert_Top)
1558-
{
1559-
pRect->origin.y = self.padding.top + topMargin;
1560-
}
15611554
else
15621555
{
15631556
pRect->origin.y = self.padding.top + topMargin;
@@ -1597,9 +1590,7 @@ -(void)horzGravity:(MyMarginGravity)horz
15971590
if (self.window != nil)
15981591
{
15991592
pRect->origin.x = (self.window.frame.size.width - leftMargin - rightMargin - pRect->size.width)/2 + leftMargin + centerMargin;
1600-
1601-
CGPoint pt = pRect->origin;
1602-
pRect->origin.x = [self.window convertPoint:pt toView:self].x;
1593+
pRect->origin.x = [self.window convertPoint:pRect->origin toView:self].x;
16031594
}
16041595

16051596

@@ -1609,10 +1600,6 @@ -(void)horzGravity:(MyMarginGravity)horz
16091600

16101601
pRect->origin.x = selfSize.width - self.padding.right - rightMargin - pRect->size.width;
16111602
}
1612-
else if (horz == MyMarginGravity_Horz_Left)
1613-
{
1614-
pRect->origin.x = self.padding.left + leftMargin;
1615-
}
16161603
else
16171604
{
16181605
pRect->origin.x = self.padding.left + leftMargin;
@@ -1916,6 +1903,25 @@ -(CGFloat)validMargin:(MyLayoutPos*)pos sbv:(UIView*)sbv calcPos:(CGFloat)calcPo
19161903
return calcPos;
19171904
}
19181905

1906+
-(BOOL)isNoLayoutSubview:(UIView*)sbv
1907+
{
1908+
return ((sbv.isHidden || sbv.absPos.sizeClass.isHidden) && self.hideSubviewReLayout) || sbv.useFrame;
1909+
}
1910+
1911+
-(NSMutableArray*)getLayoutSubviews
1912+
{
1913+
NSMutableArray *sbs = [NSMutableArray arrayWithCapacity:self.subviews.count];
1914+
for (UIView *sbv in self.subviews)
1915+
{
1916+
if ([self isNoLayoutSubview:sbv])
1917+
continue;
1918+
1919+
[sbs addObject:sbv];
1920+
1921+
}
1922+
1923+
return sbs;
1924+
}
19191925

19201926

19211927
- (void)alterScrollViewContentSize:(CGRect)newRect

MyLayout/Lib/MyFloatLayout.m

+1-9
Original file line numberDiff line numberDiff line change
@@ -1119,15 +1119,7 @@ -(CGRect)calcLayoutRect:(CGSize)size isEstimate:(BOOL)isEstimate pHasSubLayout:(
11191119
{
11201120
CGRect selfRect = [super calcLayoutRect:size isEstimate:isEstimate pHasSubLayout:pHasSubLayout sizeClass:sizeClass];
11211121

1122-
NSMutableArray *sbs = [NSMutableArray arrayWithCapacity:self.subviews.count];
1123-
for (UIView *sbv in self.subviews)
1124-
{
1125-
if ((sbv.isHidden && self.hideSubviewReLayout) || sbv.useFrame || sbv.absPos.sizeClass.isHidden)
1126-
continue;
1127-
1128-
[sbs addObject:sbv];
1129-
}
1130-
1122+
NSArray *sbs = [self getLayoutSubviews];
11311123

11321124
for (UIView *sbv in sbs)
11331125
{

MyLayout/Lib/MyFlowLayout.m

+1-11
Original file line numberDiff line numberDiff line change
@@ -1169,21 +1169,11 @@ -(CGRect)calcLayoutRect:(CGSize)size isEstimate:(BOOL)isEstimate pHasSubLayout:(
11691169
CGRect selfRect = [super calcLayoutRect:size isEstimate:isEstimate pHasSubLayout:pHasSubLayout sizeClass:sizeClass];
11701170

11711171

1172-
NSMutableArray *sbs = [NSMutableArray arrayWithCapacity:self.subviews.count];
1173-
for (UIView *sbv in self.subviews)
1174-
{
1175-
if ((sbv.isHidden && self.hideSubviewReLayout) || sbv.useFrame || sbv.absPos.sizeClass.isHidden)
1176-
continue;
1177-
1178-
[sbs addObject:sbv];
1179-
}
1180-
1172+
NSMutableArray *sbs = [self getLayoutSubviews];
11811173

11821174

11831175
for (UIView *sbv in sbs)
11841176
{
1185-
if (sbv.useFrame || (sbv.isHidden && self.hideSubviewReLayout) || sbv.absPos.sizeClass.isHidden)
1186-
continue;
11871177

11881178
if (!isEstimate)
11891179
{

MyLayout/Lib/MyFrameLayout.m

+14-16
Original file line numberDiff line numberDiff line change
@@ -64,21 +64,21 @@ -(void)calcSubView:(UIView*)sbv pRect:(CGRect*)pRect inSize:(CGSize)selfSize
6464
if (sbv.widthDime.dimeRelaVal.view == self)
6565
pRect->size.width = (selfSize.width - self.leftPadding - self.rightPadding) * sbv.widthDime.mutilVal + sbv.widthDime.addVal;
6666
else
67-
pRect->size.width = sbv.widthDime.dimeRelaVal.view.absPos.width * sbv.widthDime.mutilVal + sbv.widthDime.addVal;
67+
pRect->size.width = sbv.widthDime.dimeRelaVal.view.estimatedRect.size.width * sbv.widthDime.mutilVal + sbv.widthDime.addVal;
6868
}
6969

7070
if (sbv.heightDime.dimeRelaVal != nil && sbv.heightDime.dimeRelaVal.view != sbv)
7171
{
7272
if (sbv.heightDime.dimeRelaVal.view == self)
7373
pRect->size.height = (selfSize.height - self.topPadding - self.bottomPadding) * sbv.heightDime.mutilVal + sbv.heightDime.addVal;
7474
else
75-
pRect->size.height = sbv.heightDime.dimeRelaVal.view.absPos.height * sbv.heightDime.mutilVal + sbv.heightDime.addVal;
75+
pRect->size.height = sbv.heightDime.dimeRelaVal.view.estimatedRect.size.height * sbv.heightDime.mutilVal + sbv.heightDime.addVal;
7676

7777
}
7878

7979
pRect->size.width = [self validMeasure:sbv.widthDime sbv:sbv calcSize:pRect->size.width sbvSize:pRect->size selfLayoutSize:selfSize];
8080

81-
81+
8282
//特殊处理如果设置了左右边距则确定了视图的宽度
8383
if (sbv.leftPos.posVal != nil && sbv.rightPos.posVal != nil)
8484
horz = MyMarginGravity_Horz_Fill;
@@ -131,15 +131,13 @@ -(CGRect)calcLayoutRect:(CGSize)size isEstimate:(BOOL)isEstimate pHasSubLayout:(
131131

132132
CGRect selfRect = [super calcLayoutRect:size isEstimate:isEstimate pHasSubLayout:pHasSubLayout sizeClass:sizeClass];
133133
CGSize selfSize = selfRect.size;
134-
NSArray *sbs = self.subviews;
135134
CGFloat maxWidth = self.leftPadding;
136135
CGFloat maxHeight = self.topPadding;
136+
137+
NSArray *sbs = [self getLayoutSubviews];
137138
for (UIView *sbv in sbs)
138139
{
139140

140-
if ((sbv.isHidden && self.hideSubviewReLayout) || sbv.useFrame || sbv.absPos.sizeClass.isHidden)
141-
continue;
142-
143141
if (!isEstimate)
144142
{
145143
sbv.absPos.frame = sbv.frame;
@@ -205,18 +203,18 @@ -(CGRect)calcLayoutRect:(CGSize)size isEstimate:(BOOL)isEstimate pHasSubLayout:(
205203
selfRect.size.width = [self validMeasure:self.widthDime sbv:self calcSize:selfRect.size.width sbvSize:selfRect.size selfLayoutSize:self.superview.frame.size];
206204

207205
//调整尺寸和父布局相等的视图的尺寸。
208-
for (UIView *sbv in sbs)
206+
if (self.wrapContentWidth || self.wrapContentHeight)
209207
{
210-
if ((sbv.isHidden && self.hideSubviewReLayout) || sbv.useFrame || sbv.absPos.sizeClass.isHidden)
211-
continue;
212-
213-
if ((sbv.marginGravity & MyMarginGravity_Horz_Mask) == MyMarginGravity_Vert_Fill || (sbv.marginGravity & MyMarginGravity_Vert_Mask) == MyMarginGravity_Horz_Fill)
208+
for (UIView *sbv in sbs)
214209
{
215-
CGRect rect = sbv.absPos.frame;
216-
[self calcSubView:sbv pRect:&rect inSize:selfRect.size];
217-
sbv.absPos.frame = rect;
210+
if ((sbv.marginGravity & MyMarginGravity_Horz_Mask) == MyMarginGravity_Vert_Fill || (sbv.marginGravity & MyMarginGravity_Vert_Mask) == MyMarginGravity_Horz_Fill)
211+
{
212+
CGRect rect = sbv.absPos.frame;
213+
[self calcSubView:sbv pRect:&rect inSize:selfRect.size];
214+
sbv.absPos.frame = rect;
215+
}
216+
218217
}
219-
220218
}
221219

222220
return selfRect;

MyLayout/Lib/MyLayout.h

+7
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@
3535
*/
3636

3737

38+
/*
39+
version1.2.1
40+
1. 修正了相对布局中子视图隐藏时,相关子视图重新排列布局可能导致不正确的问题。相对布局中子视图隐藏时其他视图重新排列布局的算法是:隐藏的子视图的尺寸设置为0,所以依赖隐藏的子视图的边距依赖无效,变为依赖隐藏子视图所依赖的边距。
41+
2. 垂直线性布局里面添加了A.heightDime.equalTo(A.widthDime)的支持。水平线性布局不支持。
42+
3.优化了代码结构,增加了代码的可读性。
43+
*/
44+
3845
/*
3946
version1.2.0
4047
1. 修复了垂直线性布局中同时设置myLeftMargin,myRightMargin并且设置了gravity=MyMarginGravity_Horz_Center时前者设置失效的问题。水平线性布局亦然。

MyLayout/Lib/MyLayoutInner.h

+4
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@
5555

5656
-(CGFloat)validMargin:(MyLayoutPos*)pos sbv:(UIView*)sbv calcPos:(CGFloat)calcPos selfLayoutSize:(CGSize)selfLayoutSize;
5757

58+
-(BOOL)isNoLayoutSubview:(UIView*)sbv;
59+
60+
-(NSMutableArray*)getLayoutSubviews;
61+
5862
@end
5963

6064

0 commit comments

Comments
 (0)