Changelog History
Page 3
-
v1.3.6 Changes
➕ Added
- 添加了对阿拉伯国家的从右往左方向布局的功能#issue33。系统提供了一个类属性:
isRTL
来实现对RTL布局的支持。同时为了支持RTL系统增加了UIView的扩展属性:leadingPos, trailingPos, myLeading,myTrailing
用来实现头部和尾部的方向,MyBaseLayout则添加了leadingPadding,trailingPadding
用来实现内边距的RTL支持。而边界线则增加了leadingBorderline, trailingBorderline
属性来支持RTL。同时新增了MyGravity_Horz_Leading,MyGravity_Horz_Trailing
两个停靠属性。下面的表格是介绍这些属性的意义。
所属类名 新属性 等价于LRT方向布局 等价于RTL布局方向 UIView(MyLayoutExt) leadingPos leftPos rightPos UIView(MyLayoutExt) trailingPos rightPos leftPos UIView(MyLayoutExt) myLeading myLeft myRight UIView(MyLayoutExt) myTrailing myRight myLeft MyBaseLayout leadingPadding leftPadding rightPadding MyBaseLayout trailingPadding rightPadding leftPadding MyBaseLayout leadingBorderline leftBorderline rightBorderline MyBaseLayout trailingBorderline rightBorderline leftBorderline MyGravity MyGravity_Horz_Leading MyGravity_Horz_Left MyGravity_Horz_Right MyGravity MyGravity_Horz_Trailing MyGravity_Horz_Right MyGravity_Horz_Left 如果您的界面布局不需要考虑RTL以及对阿拉伯国际的支持则不需要使用上述新添加的属性。
- 添加了UIView扩展新属性
wrapContentSize
用来简化对wrapContentHeight和wrapContentWidth
的设置。这个属性尤其对UILabel
有用,表示视图的尺寸由内容自适用。 - 实现了对UILabel的
text
和attributedText
进行设置后自动布局的功能,老版本的代码中每次设置完毕text值后要调用一下sizeToFit来激发布局,新版本自动添加了这个功能,使得不需要明确调用sizeToFit了。但是这样的前提是您必须对UILabel设置了wrapContentHeight或者wrapContentWidth。 ✅ 4. 对布局类添加新属性cacheEstimatedRect
,这个属性用来和高度自实用的UITableViewCell结合使用能大幅度的提供布局计算的性能。这个属性提供了缓存一次尺寸评估的机制,使得当存在有复用的cell时减少布局的计算。 具体例子参考(DEMO:AllTest1TableViewCell) ✅ 5. MyLayoutPos对象的equalTo方法的val值新增加了对UIView对象的支持,可以直接设置某个视图的位置等于另外一个视图,表示等于另外一个视图的对应的位置;另外val的值还支持对id对象的支持,比如topPos可以等于视图控制器的topLayoutGuide属性,bottomPos可以等于视图控制器的bottomLayoutGuide属性,这样就可以使得某个布局视图下的子视图的位置不会延生到导航条下面去。具体请参考DEMO:LLTest1ViewController。 - MyLayoutSize对象的equalTo方法的val值新增加了对UIView对象的支持,可以直接设置某个视图的尺寸等于另外一个视图,表示等于另外一个视图的对应的尺寸。
- 对边界线类
MyBorderline
增加属性offset
可以实现边界线绘制的偏移位置,而不是默认的在视图的边界上。
🛠 Fixed
- 修复了将一个布局视图加入到SB或者XIB上时同时设置了四周边距而不起作用的#BUG36。具体解决的方法是实现了MyBaseLayout的awakeFromNib方法,然后在里面更新了布局。
- 修复了框架布局
MyFrameLayout
和相对布局MyRelativeLayout
中计算wrapContentSize
时可能计算错误的BUG。
🔄 Changed
- 为了和TangramKit库保持一致,对一些名字进行了统一的定义。下面表格列出了新旧名称的定义变化。
所属类名 新定义 老定义 MyOrientation MyOrientation MyLayoutViewOrientation MyOrientation MyOrientation_Vert MyLayoutViewOrientation_Vert MyOrientation MyOrientation_Horz MyLayoutViewOrientation_Horz MyAdjustScrollViewContentSizeMode MyAdjustScrollViewContentSizeMode MyLayoutAdjustScrollViewContentSizeMode MyAdjustScrollViewContentSizeMode MyAdjustScrollViewContentSizeModeAuto MyLayoutAdjustScrollViewContentSizeModeAuto MyAdjustScrollViewContentSizeMode MyAdjustScrollViewContentSizeModeNo MyLayoutAdjustScrollViewContentSizeModeNo MyAdjustScrollViewContentSizeMode MyAdjustScrollViewContentSizeModeYes MyLayoutAdjustScrollViewContentSizeModeYes 如果您要替换掉所有老方法和属性(建议替换),则您可以按照如下步骤来完成代码的替换工作: 1. 查找所有:MyLayoutViewOrientation_ 并替换为MyOrientation_ (选择Containning, 查找后选择preview,然后把除MyLayout库之外的其他都替换掉) 2. 查找所有:MyLayoutAdjustScrollViewContentSizeMode 并替换为MyAdjustScrollViewContentSizeMode (选择Containning, 查找后选择preview,然后把除MyLayout库之外的其他都替换掉)
- 新版本优化了布局库的子视图构建性能和布局性能。下面表格是新旧版本各布局视图内单个子视图在iPhone6真机设备下的构建和布局时长值(单位是毫秒ms)
- 添加了对阿拉伯国家的从右往左方向布局的功能#issue33。系统提供了一个类属性:
-
v1.3.5 Changes
➕ Added
✅ 1. 线性布局
MyLinearLayout
中的shrinkType
属性增加了对MySubviewsShrink_Space
枚举的支持,也就是可以支持当子视图的尺寸大于布局的尺寸时会自动压缩子视图之间的间距。具体例子参见(DEMO:AllTest7ViewController)中最后一个小例子。- 添加了同时设置左右边距的
horzMargin
和同时设置上下边距的vertMargin
两个视图的扩展属性,方便进行左右和上下边距的设置。
🛠 Fixed
- 修复了数量约束流式布局
MyFlowLayout
中当最后一行的数量等于每行的数量时无法拉伸间距的#BUG35。
🔄 Changed
- 大大优化了布局库里面布局位置对象和布局尺寸的内存占用问题,将原来的每个视图都会建立18个布局位置对象和6个布局尺寸对象变化为了只按需要才建立,也就是只有用到了某个位置和某个尺寸才会建立的懒加载模式,这样减少了将近10倍的对象数量的创建,同时还优化了性能和布局的速度:比如屏幕旋转,sizeclass类型的获取,以及布局扩展属性的获取都进行优化处理。
- 对代码进行了规范化整理,对所有内部的方法都以my开头,并进行了分类处理。这样便于管理和理解。
- V1.3.5中对布局库中的一些方法名或者属性名进行了重新命名处理,目的是为了使命名更加规范合理,以及和TangramKit更加保持一致。下面列出了名字变更的列表:
所属类(class) 老命名(old name) 新命名(new name) UIView(MyLayoutExt) myTopMargin myTop UIView(MyLayoutExt) myLeftMargin myLeft UIView(MyLayoutExt) myBottomMargin myBottom UIView(MyLayoutExt) myRightMargin myRight UIView(MyLayoutExt) myCenterXOffset myCenterX UIView(MyLayoutExt) myCenterYOffset myCenterY UIView(MyLayoutExt) myCenterOffset myCenter UIView(MyLayoutExt) widthDime widthSize UIView(MyLayoutExt) heightDime heightSize UIView(MyLayoutExt) flexedHeight wrapContentHeight MyBaseLayout subviewMargin subviewSpace MyBaseLayout subviewVertMargin subviewVSpace MyBaseLayout subviewHorzMargin subviewHSpace MyBaseLayout leftBorderLine leftBorderline MyBaseLayout rightBorderLine rightBorderline MyBaseLayout topBorderLine topBorderline MyBaseLayout bottomBorderLine bottomBorderline MyBaseLayout boundBorderLine boundBorderline MyBaseLayout IntelligentBorderLine intelligentBorderline MyBaseLayout notUseIntelligentBorderLine notUseIntelligentBorderline MyBorderline MyBorderLineDraw MyBorderline MyGravity MyMarginGravity MyGravity MyGravity MyMarginGravity_XXXX MyGravity_XXXX MyLinearLayout averageSubviews: equalizeSubviews: MyLinearLayout averageSubviews:inSizeClass: equalizeSubviews:inSizeClass: MyLinearLayout averageSubviews:withMargin equalizeSubviews:withSpace MyLinearLayout averageSubviews:withMargin:inSizeClass: equalizeSubviews:withSpace:inSizeClass: MyLinearLayout averageMargin: equalizeSubviewsSpace: MyLinearLayout averageMargin:inSizeClass: equalizeSubviewsSpace:inSizeClass: MyTableLayout rowSpacing subviewVSpace MyTableLayout colSpacing subviewHSpace 非常抱歉进行了这么多名称的变更。现在是将所有老的属性和方法名都设置为了过期属性和方法,并且依然能够使用,但是会报告警。
为了保持对老版本的兼容性,您可以在PCH文件,或者MyLayout.h的头文件引用前,或者工程设置中 加入宏定义: #define MY_USEOLDMETHODNOWARNING = 1 样就不会产代码中使用老方法名而报警了。
如果您要替换掉所有老方法和属性(建议替换),则您可以按照如下步骤来完成代码的替换工作:
1. 查找所有:MyMarginGravity_ 并替换为MyGravity_ (选择Containning, 查找后选择preview,然后把除MyLayout库之外的其他都替换掉) 2. 把所有.myLeftMargin, .myRightMargin, .myTopMargin, .myBottomMargin, .myCenterXOffset, .myCenterYOffset, .myCenterOffset 分别替换为.myLeft, .myRight, .myTop, .myBottom, .myCenterX, .myCenterY, .myCenter (选择Matching模式) 3. 把所有.widthDime替换为.widthSize, .heightDime替换为.heightSize (选择Matching模式) 4. 把所有.subviewMargin替换为.subviewSpace, .subviewVertMargin替换为.subviewVSpace, .subviewHorzMargin替换为.subviewHSpace (选择Matching模式) 5. 把所有的MyBorderLineDraw替换为MyBorderline(选择Matching模式 并注意MyBaseLayout.h中的不要替换) 6. 把.leftBorderLine替换为.leftBorderline, .rightBorderLine替换为.rightBorderline, .topBorderLine替换为.topBorderline, .bottomBorderLine替换为.bottomBorderline, .IntelligentBorderLine替换为.intelligentBorderline, .notUseIntelligentBorderLine替换为.notUseIntelligentBorderline(选择Matching模式) 7. 把averageSubviews:方法替换为equalizeSubviews: 把averageMargin:替换为equalizeSubviewsSpace: (注意不要替换MyLinearLayout.h和MyLinearLayout.m中的部分)
- 添加了同时设置左右边距的
-
v1.3.4 Changes
➕ Added
✅ 1. 布局视图添加了新方法
-(CGRect)subview:(UIView*)subview estimatedRectInLayoutSize:(CGSize)size
用来评估一个将要加入布局视图的子视图的frame值。这个方法通常用来实现一些子视图在布局视图之间移动的动画效果的能力。具体例子参见(DEMO:AllTest4ViewController)🔄 Changed
- 优化了当将一个布局视图作为视图控制器的根视图时(self.view)的一些属性设置可能导致约束冲突,和可能导致将控制器中的视图加入到一个滚动视图时无法滚动的问题。
- 将线性布局
MyLinearLayout
中的shrinkType属性的默认值由原来的MySubviewsShrink_Average
改为了MySubviewsShrink_None
,也就是默认是不压缩的。 - 修正了相对布局中的子视图设置
useFrame
为YES时,子视图无法自由控制自己的frame的问题。 - 优化了所有类以及方法和属性以及各种类型的注释,注释更加清晰明了。同时优化了所有DEMO中的注释信息。
- 在布局视图以及一些扩展视图中增加了IBInspectable标识,以便更好的和XIB以及SB编程结合。
-
v1.3.3 Changes
➕ Added
✅ 1. 线性布局
MyLinearLayout
中的shrinkType
中添加了一个可设置的值MySubviewsShrink_Auto
这个值的目的是为了解决水平线性布局里面当有左右2个子视图的宽度都不确定,但又不希望2个子视图不能重叠展示的问题。具体例子参见(DEMO:AllTest7ViewController 中的第4个例子)。 ✅ 2. 布局视图添加了属性zeroPadding
用来描述当布局视图的尺寸由子视图决定,并且当布局视图中没有任何子视图时设置的padding值是否会参与布局视图尺寸的计算。默认是YES,当设置为NO时则当布局视图没有子视图时padding是不会参与布局视图尺寸的计算的。具体例子参见 (DEMO: LLTest4ViewController)- 添加了线性布局、流式布局、浮动布局的initWithFrame的方法,这样你就可以用这个方法来指定frame值了。
✅ 4. 添加了对普通视图的
wrapContentHeight
和wrapContentWidth
的支持,这两个属性由原来的布局视图属性移植到了所有视图的扩展属性中。这样对于一个非布局父视图也可以通过设置wrapContentHeight
和wrapContentWidth
来实现其高度和宽度由里面的子布局视图来决定。具体例子参见(DEMO: LLTest4ViewController)。 - 添加了对UIButton的宽度固定情况下高度自自适应的支持。
🔄 Changed
- 删除框架布局的子视图要通过
marginGravity
的扩展属性来设置位置和尺寸的支持,具体变化参见MyFrameLayout.h中的代替方法。 - 取消了对自适应高度视图扩展属性
flexedHeight
的支持,将高度自适应设置改为了通过wrapContentHeight
扩展属性的设置来完成。 - 优化了通过
makeLayout
来进行布局约束设置的一些方法。 - 修正了将一个布局视图添加到非布局视图里面后,如果后续调整了布局视图的边界设置后无法更新布局视图尺寸的问题。
- 添加了线性布局、流式布局、浮动布局的initWithFrame的方法,这样你就可以用这个方法来指定frame值了。
✅ 4. 添加了对普通视图的
-
v1.3.2 Changes
➕ Added
✅ 1. 流式布局
MyFlowLayout
添加了对分页滚动的支持,通过新增加的属性pagedCount
来实现,这个属性只支持数量约束流式布局。pagedCount
和wrapContentHeight以及wrapContentWidth
配合使用能够实现各种方向上的分页滚动效果(具体见DEMO:FLLTest5ViewController)- 线性布局
MyLinearLayout
中完全支持了所有子视图的高度等于宽度的设置的功能,以及在水平线性布局中添加了子宽度等于高度的功能。
🔄 Changed
- 流式布局
MyFlowLayout
中的子视图的widthDime,heightDime中可设置的相对类型尺寸的值的维多扩宽,不仅可以依赖兄弟视图,父视图,甚至还可以依赖别的任意的视图。
🛠 Fixed
- 修复了#BUG30,主要原因是当计算出视图的尺寸为小于0时,而又将这个尺寸用来设置视图的bounds属性的尺寸时会调整bounds的origin部分而产生的BUG。具体展示是视图的位置产生了不正确的错误。
- 线性布局
-
v1.3.1 Changes
December 28, 2016➕ Added
- 布局位置类
MyLayoutPos
和布局尺寸类MyLayoutSize
类中添加了新属性:active
.用来描述指定的位置或者尺寸所设置的约束是否有效。 ✅ 2. 添加了Demo:ALLTest8ViewController这个例子专门用来演示把一个布局视图加入到非布局父视图时的使用方法。
🛠 Fixed
- 修正了将一个具有
wrapContentWidth
或者wrapContentHeight
属性设置的布局视图加入到非布局父视图时,且又设置centerXPos,centerYPos,rightPos,bottomPos来定位布局视图时无法正确定位布局视图位置的BUG。
🔄 Changed
- 修改了将布局视图加入
UIScrollView
时会自动调整UIScrollView
的contentSize
的机制,新的机制中布局视图设置的MyLayoutPos
边距值也会算到contentSize里面去。比如某个布局的高度是100,其中的myTopMargin = 10, 那么当将布局视图加入到UIScrollView时他的contentSize的高度则是110.
- 布局位置类
-
v1.3.0 Changes
December 21, 2016➕ Added
- 添加对布局位置类
MyLayoutPos
的方法:lBound,uBound
用来设置视图的位置最小最大的依赖,lBound,uBound
方法只有在相对布局中的子视图设置才有效。 ✅ 2. 添加了Demo:RLTest5ViewController这个例子专门用来演示相对布局中的子视图设置lBound,uBound方法的例子。
🛠 Fixed
- 修复路径布局
MyPathLayout
中设置wrapContentWidth
和wrapContentHeight
为YES时的计算错误的情况。 - 修复线性布局
MyLinearLayout
里面均分间距和均分视图两个方法可能导致均分不正确的BUG。 - 修复了相对布局
MyRelativeLayout
中如果设置了topPadding
而子视图的topPos
设置为数值时topPadding
不起作用的BUG#29。 - 修复了相对布局
MyRelativeLayout
中子视图的高度设置为flexedHeight
时计算可能不正常的问题。
🔄 Changed
- 优化了相对布局和框架布局时的性能。
- 添加对布局位置类
-
v1.2.9 Changes
➕ Added
- MyMarginGravity枚举类型添加了
MyMarginGravity_Horz_Between,MyMarginGravity_Vert_Between
两个新的类型的值,用于描述对布局里面子视图的拉伸操作。 - 扩充了线性布局MyLinearLayout中的
gravity
属性的功能(具体见LLTest3ViewController应用)。 - 扩充了流式布局MyFlowLayout中的
gravity
属性的功能(具体见FLLTest1ViewController应用)。 - 为流式布局MyFlowLayout添加了新的方法:
-(void)setSubviewsSize:(CGFloat)subviewSize minSpace:(CGFloat)minSpace maxSpace:(CGFloat)maxSpace
用来实现内容约束流式布局的动态间距调整的功能,通过这个方法可以实现多屏幕的完美适配。 - 添加了工程中的单元测试的target和UI单元测试target。
🔄 Changed
- 浮动布局MyFloatLayout中的方法:
将过期,替换为新的方法:-(void)setSubviewFloatMargin:(CGFloat)subviewSize minMargin:(CGFloat)minMargin
-(void)setSubviewsSize:(CGFloat)subviewSize minSpace:(CGFloat)minSpace maxSpace:(CGFloat)maxSpace
。 - 流式布局MyFlowLayout中的均分子视图尺寸的属性:
将过期,替换为对averageArrange
gravity
属性的设置。 - 对功能中的相同类型的DEMO进行了分组,以便更加方便的查找对应的例子。
🛠 Fixed
- 修复了将布局视图添加到非布局父视图时,当父布局视图的位置变化因此布局视图更新布局的问题。
- MyMarginGravity枚举类型添加了
-
v1.2.8 Changes
November 25, 2016🔄 Changed
- 将老版本中的MyLayoutDime类更名为MyLayoutSize类。
- 将老版本提供的调试视图布局属性的方法改为了使用
po viewobj.myFrame.sizeClass
或者expr -o -- viewobj.myFrame.sizeClass
两种方法。
🛠 Fixed
- 修复了将布局视图加入到非布局父视图时,而又在布局视图上设置了
transform
进行坐标变换时的布局可能失效的问题。最新版本已经能和视图的transform
属性共同使用了,原因是老版本中最终进行布局时修改的是frame属性,而新版本中将所有对frame属性的修改都变化为了center和bounds两个属性。 - 修复了布局里面布局计算时浮点数==, !=, <=, >=比较时可能会出现的精度误差而导致的布局不正确的问题。
- 修复了流式布局MyFlowLayout在设置了间距时且最后一行(一列)设置了比重时的尺寸计算错误的BUG。
- 修复了框架布局MyFrameLayout在iOS7上如果子视图宽度等于高度,且居中对齐时的布局错误的BUG。
🚀 ##V1.2.7(2016/11/13)
➕ Added
- 为线性布局MyLinearLayout新增加了属性
shrinkType
。这个属性可以用来控制当子视图中有比重尺寸或者相对间距,而又有固定尺寸比布局视图的尺寸还大时,用于缩小这些固定尺寸视图的尺寸值的方法。(具体见AllTest7ViewController应用)。 ✅ 2. 为布局视图添加了rotationToDeviceOrientationBlock
属性。这个block给予用户在布局视图第一次完成或者有屏幕旋转时进行界面布局处理的机会。我们可以通过这个block块来处理设备屏幕旋转而需要改动布局的场景。这个block块不像beginLayoutBlock
以及endLayoutBlock
那样只调用一次,而是第一次布局完成以及每次屏幕旋转并布局完成后都会调用,因此要注意循环引用的问题。(具体见LLTest6ViewController应用)。 - 添加了MyLayoutDime中的
uBound
和lBound
方法中最大最小值设置时可以等于自己的情况,这样目的是为了保证视图本身的尺寸不被压缩。(具体见AllTest7ViewController应用)。 - 添加了在调试时使用
po 视图对象.absPos.sizeClass
或者expr -o -- 视图.absPos.sizeClass
方法时可以输出布局设置的各种布局属性值。 - 添加了将布局视图作为非布局视图的子视图的四周边距值可以是相对边距的支持,也就是当布局视图作为非布局视图的子视图时设置的
topPos,rightPos,topPos,bottomPos
的值是大于0且小于1时表明的是相对边距。 ✅ 6. 添加了AllTest7ViewController这个新的DEMO,用来解决一些实践中各种屏幕尺寸下布局的完美处理方案。
🔄 Changed
- 线性布局MyLinearLayout中去掉了当子视图中有设置比重,或者子视图中设置相对间距时而又设置了布局视图的
wrapContentWidth
或者wrapContentHeight
属性时,wrapContentWidth
或者wrapContentHeight
设置失效的限制。(具体见AllTest7ViewController应用)。
🛠 Fixed
- 线性布局MyLinearLayout中的水平线性布局中修复了一个当子视图中有比重尺寸或者相对间距,而又有固定尺寸比布局视图的尺寸还大时,缩小那些具有固定尺寸的子视图的宽度的一个BUG。
- 修复了视图尺寸MyLayoutDime的
uBound,lBound
方法的最大最小尺寸设置为父布局视图时,而布局视图又有padding
时,没有减去padding
值的BUG。
-
v1.2.6 Changes
October 28, 2016🔄 Changed
- 为了解决和Masonry两个库共存时,打开了Masonry的宏
MAS_SHORTHAND_GLOBALS
时造成offset, equalTo
方法无法使用的问题,解决的方法是您可以在PCH或者在使用MyLayout.h之前定义:#define MY_USEPREFIXMETHOD
这个宏,这样所有MyLayoutPos, MyLayoutDime中的方法都增加了前缀my。 比如原来的:A.leftPos.equalTo(@10) ==> A.leftPos.myEqualTo(@10)
🛠 Fixed
- 优化代码,修复一个设置布局尺寸MyLayoutDime的
uBound,lBound
方法时可以指定其他任意视图的问题。
- 为了解决和Masonry两个库共存时,打开了Masonry的宏