Autolayout优秀的第三方开源库
来源:互联网 发布:数据挖掘以什么为基础 编辑:程序博客网 时间:2024/06/05 08:22
今天才发现CSDN支持markdown了…还是给出新博客地址:Autolayout优秀的第三方开源库
最近项目开始用纯代码布局整个UI框架, 对于前一段很长时间都是xib+storyboard狂拖控件约束的我来说,每天写的代码量剧增…对于sb好还是纯代码好的争论
,可以参考下巧大大的分析.
说到UI适配布局,一般有两种方法:
* frame,利用[UIScreen mainScreen].bounds.size.width/height
,一个一个的算出对应frame,结果肯定是OK的,只是过程异常的痛苦,尤其像我这种语文老师教的数学的小学生.囧.
* autolayout,相信肯定是主流布局,而且对于UI设计师给我的效果图,也是很方便我们直接拿来进行约束设值,无须其他任何计算.
这里主要介绍手写autolayout约束,由于系统提供的api写起来又臭又长
,推荐一个不错的第三方.
OC版本对应的是Masonry
,Swift版本对应的是SnapKit
.当然还有其他优秀的autolayout相关第三方,会在结尾给出,感兴趣的朋友可以去研究下,LZ主要用Masonry
(大爱这种链式语法)^_^!
Masonry
Github地址是:Masonry
具体用法github上已经讲的很清楚了,可以下载Demo看看栗子的实现,总结一下我在使用过程中了解.
* mas_makeConstraints
使用最多,做初始约束,只负责新增约束
* mas_updateConstraints
针对make
中的约束做更新,一般不添加新约束,只是对于原约束数值的修改.
* mas_remakeConstraints
清除之前所有的约束,采用里面设置的最新约束,常用于动画之后新位置的约束设定
* 优先级高.priorityHigh
,优先级低.priorityLow
,通常用于根据条件判断来设定优先响应哪种约束
* multipliedBy(x)
= *x,dividedBy(x)
= /x
* “`
make.edges.mas_equalTo(UIEdgeInsetsMake(10, 10, 10, 10));
// edges就是相当于top-left-bottom-right
// top和left里的offset为正数
// 那么为什么bottom和right里的offset是负数呢? 因为这里计算的是绝对的数值 计算的bottom需要小于sv的底部高度 所以要-10 同理用于right
// 有意思的地方是and和with 其实这两个函数什么事情都没做,可以省略的
/* 等价于 make.top.equalTo(weakSelf.sv).with.offset(10); make.left.equalTo(weakSelf.sv).with.offset(10); make.bottom.equalTo(weakSelf.sv).with.offset(-10); make.right.equalTo(weakSelf.sv).with.offset(-10); */
“`
UIScrollView
是一个有点特殊的view,对于在里面放其他view,最好的做法是先放一个containerView
设置edges
相等,然后在此view上添加subview.模仿系统的UITabBarController的底部View,可以设定个数和间隔:
- (void)simulateSystemTabBarWithButtonCount:(NSInteger)count withSpace:(CGFloat)space {[self.view showPlaceHolder];self.view.backgroundColor = [UIColor grayColor];NSMutableArray *viewArray = [NSMutableArray arrayWithCapacity:10];for (int i = 0; i < count; i++) { UIView *view = [UIView new]; view.backgroundColor = [UIColor colorWithHue:( arc4random() % 256 / 256.0 ) saturation:( arc4random() % 128 / 256.0 ) + 0.5 brightness:( arc4random() % 128 / 256.0 ) + 0.5 alpha:1];; [view showPlaceHolder]; [self.view addSubview:view]; [viewArray addObject:view];}UIView *lastView = viewArray.lastObject;for (int i = 0; i < count; i++) { UIView *view = (UIView *)viewArray[i]; [view mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(view.superview); make.height.equalTo(@49); make.width.equalTo(lastView); if (i == 0) { make.left.mas_equalTo(view.superview).offset(space); } else { UIView *frontView = (UIView *)viewArray[i-1]; make.left.equalTo(frontView.mas_right).offset(space); (i == viewArray.count - 1) ? make.right.mas_equalTo(view.superview).offset(-space) : nil; } }];}}
以count = 4 和 space =0 为例子
- 实现动画时,更新约束后调用
layoutIfNeeded
- 最后,再次强调真的非常好用!!!
SnapKit
Github地址:SnapKit
PS:目前只支持swift1.2版本,在最新的xcode7-swift2.0中会报错,我在推特上问了作者,他说最近略忙,暂时没空…囧…有兴趣的朋友可以自己改下让它支持2.0然后pull…我?还在研究中.
这个就不过多举例了,基本就是跟Masonry
一样,而且我在后面的Demo基本都是用了Snapkit
来写(xcode7上我是拖控件…没办法,谁让还不支持2.0)
举个栗子->最常见的上下两个button:
其他资料
autolayout其他第三方开源库
PureLayout
UIView-AutoLayout
MMPlaceHolder 这个是辅助工具 一个显示宽*高的插件
Cartography for swift博文
先进的自动布局工具箱
AutoLayout:忘掉Frame,拥抱Constraint
Autolayout 基础
Auto Layout Guide 官方
Masonry介绍与使用实践(快速上手Autolayout)
有趣的Autolayout示例-Masonry实现
喵神的Autolayout介绍
- Autolayout优秀的第三方开源库
- 优秀的第三方库
- Autolayout第三方库Masonry的入门与实践
- iOS开发优秀的第三方库
- 优秀的第三方常用控件
- 各种优秀的第三方库
- AndroidStudio 优秀的第三方数据库 GreenDao
- iOS 优秀第三方开源库备忘-汇总
- 15个优秀的第三方 Web 技术集成
- 15个优秀的第三方 Web 技术集成
- 15个优秀的第三方 Web 技术集成
- 15个优秀的第三方 Web 技术集成
- 15个优秀的第三方 Web 技术集成
- 15个优秀的第三方 Web 技术集成
- 15个优秀的第三方 Web 技术集成
- 推荐Java 中优秀的第三方开源 jar 包
- iOS开发中常用的优秀第三方框架
- [Erlang]优秀的第三方外部库列表
- iOS 7兼容
- 静态常量(static final)在class文件中是怎样的呢?
- calendar的使用
- 【再思考】PATBasic——1024. 科学计数法 (20)
- 童年的友情你还记得?
- Autolayout优秀的第三方开源库
- SQL调优(连接方式)
- iOS对NSNull的判断
- Spring@Autowired注解与自动装配
- Oracle中的Hash Join祥解
- Oracle中的initrans-maxtrans
- 70.交换变量值
- VMware下ubuntu系统一直莫名其妙地连接无线网络导致Hadoop集群无法正常启动的解决方法
- 生成加法题