Da xia 的技术博客

不积跬步,无以至千里.

踏入iOS开发行列不久,暂居北京。


欢迎访问我的博客,这里主要记录我的工作和生活

AutoLayout 和 Masonry

AutoLayout中, 我们不再直接设置view的几何属性, 而是通过给View添加约束(constraints), 系统会根据这些约束来实现布局.

什么是约束(Constraint)?

Auto Layout Guide 给出的解释: Each constraint represents a single equation.

image

这个Constraint声明红色视图与蓝色视图间距为8。不仅可以在两个视图之间的属性设置Constraint,还可以在一个视图的两个不同属性之间设置Constraint,如视图的height与weight成一定比例。常用的AutoLayout属性如下图所示:

image

Intrinsic Content Size

Intrinsic Content Size依赖于视图的当前内容,如Button和Label的intrinsic content size依赖于它展示字符数量和字体大小。有些视图的intrinsic content size比较复杂,如ImageView,没有图片是就没有intrinsic content size,当添加了图片后intrinsic content size立刻变成当前图片的大小。AutoLayout使用一对Constraint从两个维度表现ntrinsic content size。

image

  • Content Hugging: 使视图不向外扩张
  • Compression Resistance: 保持视图大小不被压缩 并不是所有的视图都有 intrinsic content size。 image

Masnary

Masonry 是一个轻量级的布局框架,使用优雅的链式语法封装自动布局,使用方便,可提高手写布局的开发效率。它提供了三个主要的API:

- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;
    - (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;
    - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;
  • mas_makeConstraints: 只负责新增约束 Autolayout 不能同时存在两条针对于同一对象的约束 否则会报错
  • mas_updateConstraints: 针对上面的情况,会更新在block中出现的约束,不会导致出现两个相同约束的情况
  • mas_remakeConstraints: 清除之前的所有约束,仅保留最新的约束

4. 系统更新Constraints的方法

  • updateConstraints
  • updateConstraintsIFNeeded
  • setNeedsUpdateConstraints
最近的文章

多线程编程指南(一)线程管理

线程是应用程序中独立的实体,它有自己的运行栈,可以被内核独立的调度。创建线程需要消耗一定的系统资源,要为它分配内核内存空间和程序内存空间。内核内存空间用于保存线程数据结构和属性。程序内存空间用于存储线程栈,在 iOS 中,主线程至少是 1M,子线程最少 16KB 。1 创建线程创建线程相对简单,首先创建一个方法作为线程入口,然后从另一个线程启动它即可。1.1 使用 NSThread 创建线程直接使用 NSThread 的类方法 detachNewThreadSelector:toTarge...…

继续阅读