iOS: 在代码中使用Autolayout (3) – 使用PureLayout来简化操作

之前写过两篇文章:iOS: 在代码中使用Autolayout (1) – 按比例缩放和优先级iOS: 在代码中使用Autolayout (2) – intrinsicContentSize和Content Hugging Priority讲述在iOS中使用代码来写Autolayout,读者可以看到,用代码写Autolayout是比较枯燥且容易出错的。当然也有很多代替方法,比如苹果官方的Visual Format Language,还有一些重量级的工程比如Masonry,这里介绍一个轻量的,支持iOS和OS X的工程PureLayout,之所以轻量是因为PureLayout没有再加入一套自己的语法,而是以Category的形式辅助苹果已有的NSLayoutConstraint那套东西,体积小,写起来更底层同时也不乏可读性。

比如上文中的简单的两个黄色方块的程序,用PureLayout写更快捷。

首先,把PureLayout源代码加入到工程中,或者用CocoaPods安装(podilfe中加pod 'PureLayout')。

然后加一个创建View的辅助函数:

- (UIView*)createView {
//有Autolayout不需要设置frame
UIView *view = [UIView new];
view.backgroundColor = [UIColor yellowColor];
//不允许AutoresizingMask转换成Autolayout, PureLayout内部也会帮你设置的。
view.translatesAutoresizingMaskIntoConstraints = NO;

return view;
}

在viewDidLoad中创建两个View,然后用PureLayout的方式加入Autolayout中的Constaint就可以了,代码非常好理解:

//创建两个View
UIView *view1 = [self createView];
UIView *view2 = [self createView];

//addSubview
[self.view addSubview:view1];
[self.view addSubview:view2];

//设置view1高度为70
[view1 autoSetDimension:ALDimensionHeight toSize:70.0];

//view1和view2都都距离父view边距为20
ALEdgeInsets defInsets = ALEdgeInsetsMake(20.0, 20.0, 20.0, 20.0);
[view1 autoPinEdgesToSuperviewEdgesWithInsets:defInsets excludingEdge:ALEdgeBottom];
[view2 autoPinEdgesToSuperviewEdgesWithInsets:defInsets excludingEdge:ALEdgeTop];

//两个view之间距离也是20
[view2 autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:view1 withOffset:defInsets.bottom];

运行结果和上文一样:


原文地址
原文地址
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,294评论 4 61
  • 之前写过两篇文章:iOS: 在代码中使用Autolayout (1) – 按比例缩放和优先级和iOS: 在代码中使...
    Ray_win阅读 6,102评论 0 8
  • 那晚,在和民吃着炸鸡,K在微信问我,只购买VMware软件 (用于安装MAC双系统),还是软件加安装,费用翻倍。 ...
    手心妞阅读 942评论 1 1
  • 能略懂吾心之一二,莫过于樊哥了,许多痛楚时分,足以是感悟一轮。 直至今日,我才猛现樊哥的言语,身影。敬请樊哥谅解!...
    三白与君行阅读 222评论 0 0
  • 好好学习,天天向上。这是我们上学时候的信念!几乎每个教室都贴着这几个字。小时候我们在看电视的时候,父母会说“快去...
    自由的瓶子阅读 608评论 6 7