Autolayout 第三方开源库
转载自:http://blog.csdn.net/hmt20130412/article/details/46638625
今天才发现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;
}
}];
}
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
以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 第三方开源库的更多相关文章
- 第三方开源库和jar包的区别
jar包和第三方开源库的根本区别在于,开源库的功能比jar包功能更强大,通过引入库项目可以访问java文件以及该开源库项目下的资源文件,例如图片,layout等文件 jar包中只能放class文件 引 ...
- Android Studio 简介及导入 jar 包和第三方开源库方[转]
原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ...
- 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发
[原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文 http: ...
- 粉笔网iPhone端使用的第三方开源库
粉笔网iPhone端使用的第三方开源库 前言 最近有朋友问我粉笔网 iPhone 端使用了哪些第三方的开源库.我在这儿整理了一下,分享给大家. ASIHttpRequest ASIHttpReques ...
- iOS项目中常用的第三方开源库
1.项目使用的第三方开源库 项目使用了CocoaPods(类似java中的maven)管理常用的第三方库,一些特殊的单独引用,下面介绍下比较好用的几个. (1)AFNetworking 目前比较推荐的 ...
- Android 第三方开源库收集整理(转)
原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样, ...
- CocoaPods:管理Objective-c 程序中各种第三方开源库关联
在我们的iOS程序中,经常会用到多个第三方的开源库,通常做法是去下载最新版本的开源库,然后拖拽到工程中. 但是,第三方开源库的数量一旦比较多,版本的管理就非常的麻烦.有没有什么办法可以简化对第三方库的 ...
- 45.Android 第三方开源库收集整理(转)
原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样, ...
- 【开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位网友补充完善
链接地址:http://www.tuicool.com/articles/jyA3MrU 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文 http://blog.cs ...
随机推荐
- c语言-三字符组
C 源程序源字符集在 7 位 ASCII 字符集中包含,但设置为 ISO 646-1983 固定的代码的超集. 三字符序列允许 C 程序编写使用 " 仅 ISO (国际标准组织的固定的代码. ...
- 修改IP的方法(C#)
1. wmi 代码以后补 需要获取全部IP后,统一添加(貌似会造成网络瞬断) 2. iphlpapi.lib 代码以后补 可以直接添加和删除IP 3. netsh 可以直接添加和删除IP
- Java良葛格 学习笔记《二》
正则表达式 . 符合任一字符\d 符合0到9任一个数字字符\D 符合0-9以外的字符\s 符合'\t'.'\n'.'\x0B'.'\f'.'\r'等空格符\w 符合a到z.A到Z.0到9等字符,也就是 ...
- libevent linux安装
wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gzwget http://downloads.sourceforge.net/le ...
- Mybatis——helloWorld级程序
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...
- idea编译器中maven项目获取路径的方法
资源文件放在哪里? 上 图中的 resources 目录叫资源目录 (main下,与java如果没有请自行创建), 在项目编译后文件会被放到红色的 classes 目录下, 注意如果你的 resour ...
- php中获取各种路径
echo $_SERVER['DOCUMENT_ROOT'].""; //获得服务器文档根 echo $_SERVER['PHP_SELF'].""; //获得 ...
- pipe的实现
本文进行了详细的描述,http://blog.csdn.net/zhouhong1026/article/details/8151235
- [转]ubuntu的which、whereis、locate和find命令
which 只能寻找执行文件 ,并在PATH变量里面寻找. whereis 从linux文件数据库(/var/lib/slocate/slocate.db)寻找,所以有可能找到刚刚删除,或者没有发现 ...
- AI 人工智能 探索 (四)
在写之前,先对昨天寻路插件再做一些补充,因为该插件不是很完善,所以当我发现有不能满足需求的时候,就会试图更改源代码,或增加接口来符合我的需求. 昨天补充了一条是 自身转向代码,今天补充另外一条,是及时 ...