转载自: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 第三方开源库的更多相关文章

  1. 第三方开源库和jar包的区别

    jar包和第三方开源库的根本区别在于,开源库的功能比jar包功能更强大,通过引入库项目可以访问java文件以及该开源库项目下的资源文件,例如图片,layout等文件 jar包中只能放class文件 引 ...

  2. Android Studio 简介及导入 jar 包和第三方开源库方[转]

    原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ...

  3. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  4. 粉笔网iPhone端使用的第三方开源库

    粉笔网iPhone端使用的第三方开源库 前言 最近有朋友问我粉笔网 iPhone 端使用了哪些第三方的开源库.我在这儿整理了一下,分享给大家. ASIHttpRequest ASIHttpReques ...

  5. iOS项目中常用的第三方开源库

    1.项目使用的第三方开源库 项目使用了CocoaPods(类似java中的maven)管理常用的第三方库,一些特殊的单独引用,下面介绍下比较好用的几个. (1)AFNetworking 目前比较推荐的 ...

  6. Android 第三方开源库收集整理(转)

    原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样,  ...

  7. CocoaPods:管理Objective-c 程序中各种第三方开源库关联

    在我们的iOS程序中,经常会用到多个第三方的开源库,通常做法是去下载最新版本的开源库,然后拖拽到工程中. 但是,第三方开源库的数量一旦比较多,版本的管理就非常的麻烦.有没有什么办法可以简化对第三方库的 ...

  8. 45.Android 第三方开源库收集整理(转)

    原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样,  ...

  9. 【开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位网友补充完善

    链接地址:http://www.tuicool.com/articles/jyA3MrU 时间 2015-01-05 10:08:18  我是程序猿,我为自己代言 原文  http://blog.cs ...

随机推荐

  1. LoadRunner学习知多少--IP欺骗使用

    使用IP欺骗功能时,需要将系统防火墙,杀毒软件关闭(如果有影响的话) 一.为什么要设置IP欺骗 1. 当某个IP的访问过于频繁,或者访问量过大时,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频 ...

  2. html 时间单位

    <style>h1{font-size:16px;} .test{position:absolute;left:8px;width:200px;height:100px;margin:0 ...

  3. 缩放系列(二):所有子控件也随着缩放、手势缩放、多点触控layout

    下面是一个功能强大的改造的例子: 可以实现以下需求: 1.两个手指进行缩放布局 2.所有子控件也随着缩放, 3.子控件该有的功能不能丢失(像button有可被点击的功能,缩放后不能丢失该功能) 运行效 ...

  4. AJAX 在手机上用时

    Response.ContentType = "text/html; text/plain; charset=UTF-8";

  5. HttpWebResponse远程服务器返回错误: (500) 内部服务器错误

    现象 我们编码实现请求一个页面时,请求的代码类似如下代码: HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl);req.Use ...

  6. sql server 数据库导出表里所有数据成insert 语句

    有时候,我们想把数据库的某张表里的所有数据导入到另外一个数据库或另外一台计算机上的数据库,对于sql server有这样的一种方法 下面我以sql server 2008 R2,数据库是Northwi ...

  7. CSS单行、多行文本溢出显示省略号(……)

    这个问题经常遇到 1.单行文本溢出显示省略号(…) text-overflow:ellipsis-----部分浏览器还需要加宽度width属性 overflow:hidden;text-overflo ...

  8. 错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 C:\Users\Administ

    错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 C:\Users\Administ 这两个fatal error是因为从低版本的WTL到高版本的WTL转变后产生的 ...

  9. HTML day01基础总结

    1.网页的基本元素 文字.图像与超链接. 2.每一个网页元素通常由开始标记.结束标记,以及在这两个标记中的内容所组成. 3.一般结构 <html> <head> <met ...

  10. CI 框架 hooks 的调用方法

    流程:在hooks中写一个类 ,  在system/core/CodeIgniter.php  判断什么时候执行    hooks中的类      涉及到了php反射获取类  方法   方法中的注释 ...