Marc StevenCoder
Jul 29, 2017 · 3 min read
屏幕快照 2017-07-29 下午8.48.47

Autoresizing mask attributes

AutoResizingMask 自从ios出现的时候就提出了,这真的是第一种方式去创建一个能自动适配尺寸变化的视图。但是在现今的开发中,使用的场景十分有限。
一个autoresizing mask简单地定义了六个属性的flexibility-在一个视图和它的父视图之间。左边,顶部,右边,底部的margin,并且还有宽度和高度。在这种时间中,margin仅仅意味着在视图的那个边缘和父视图之间的距离。
这些属性的每个都被定义为fixed 或者flexible,定义了这些属性将会变化一旦视图的父视图的size改变。如果这个attribute 是被fixed,它将甚至不改变,当父视图的边缘改变时候。
但是如果attributes是flexible,属性将相应地改变到父视图大小的改变

屏幕快照 2017-07-29 下午8.29.52

Notice:高度和宽度在线条结束处有箭头,当设置时候,它们是flexible,没有设置的时候是fixed,但是所有在线条结尾处的有长条的margins,当set的时候,它们是fixed,没有设置则为flexible
当你徘徊在这些section的时候,右边的缩略图将用当前的设置动画地给你展示一个在父视图内的改变将如何改变这个视图。

局限性

Autoresizing mask 对于有简单的规则的简单的视图是伟大的去呈现如何同父视图交互。但是对于必须和其他视图交互的视图而言,你需要更多一点
例如这里有个titleLabel应该居中,一个button紧贴它。但是如果这个button有文本增长,像德语的转换但是title应该移动去阻止覆盖。autoresizing mask不能处理这样的场景类型

屏幕快照 2017-07-29 下午8.59.18


这就是为什么自动布局产生的原因

autoresizing masks 和约束

在这样的场景下,系统转换你的autoresizing masks进入到约束。它做了这些,因此你能混合和其他视图(使用约束)有autoresizing masks的视图
。在UIView中有一个属性去控制这个-translateAutoresizingMaskIntoConstraints。如果它设为true,系统基于autoresizing mask去创建约束。Interface builder将会自动设置这个属性为true 或者false(基于你的视图是否有定义的约束)。但是对于以代码方式生成的视图,这个总是默认为true

屏幕快照 2017-07-29 下午9.34.40
Marc StevenCoder

Written by

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade