iOS布局-AutoresizingMask

前端的主要任务简单来看,就是绘制界面,绑定数据。在iOS绘制界面的布局方式主要有以下三种:

  1. frame
  2. autoresizingMask
  3. AutoLayout

fame:常用于绝对布局,通过设置x, y, width, height来确定控件的位置和大小。

autoresingMask:苹果早期的相对布局的方案,允许子视图跟随父视图变化而变化,比如按比例缩放宽高,按比例缩放边距,仅限于两个视图之间使用,需要fame配合使用[不建议代码使用,可以在xib中使用]。

AutoLayout:iOS6引入基于关系的相对布局方式,允许视图与另外一个或者多个视图保持约束关系,可以在多个视图间使用,但是建议参考父视图添加约束,系统可以自动将frame转为约束。

Waring: 同一个视图,不能同时使用autoresizingMask和AutoLayou,比如视图A不能左边关系使用autoresizingMask,高宽布局使用AutoLayout。但是允许同一父视图,不同子视图使用autoresizingMask或者AutoLayout

AutoresizingMask理解

与frame绝对布局不同,autoresizingMask允许子视图的大小和位置跟随父视图动态变化,比如像UIButtion内部哪些子控件就使用autoresizingMask来布局达到适应效果。

借助xib我们可以形象理解autoresizingMask。

设置子视图与父视图宽高等比例变化效果图如下:

设置等比例高度变化,底边距等比例间距,效果如下

通过上面的 gif 我们能轻松理解autoresizingMask的布局特点。就是可以设置等比例变化,达到视图自适应变化。

autoresizingMask支持 xib 和代码。

UIViewAutoresizing枚举值

在autoresizingMask中,通过控制UIView的autoresizingMask属性控制,包含以下枚举值:

布局关系 视图随父视图等比例变化
none 默认值,不会随父视图改变而改变
flexiableLeftMargin 子视图左边距,等比例变化
flexiableWidth 子视图宽度,等比例变化
flexiableRightMargin 子视图右边距,等比例变化
flexiableTopMargin 子视图上边距,等比例变化
flexiableHeight 子视图高度,等比例变化
flexiableBottomMargin 子视图底边距离,等比例变化

Tips: flexiable表示灵活的、可自适应的、弹性的意思

实际设置往往需要组合这几个枚举值达到要求。

注意:在xib的Size Inspector的autoresizing中也可以设置对应关系(而且很简单),但是表达方式可能不一样,对于边距,在xib中选中表示不变的边距 , 对于宽高,选中表示等比例变化的。如下图

代码枚举值却是:[.flexibleTopMargin, .flexibleRightMargin]

xib/StroryBoard使用autoresizingMask

通过xib设置autoresizingMask很简单,也很直观,当你选择完后,鼠标放在上面就会有动效,可以观察到是不是自己想要的效果。

比如实现这个需求:label在不同尺寸的屏幕上,自适应变化宽高,等比例设置左右边距,但是顶部边距不变,达到不同设备相似视觉感。

首先在storyboard中,以SE屏幕Controller为参考设置想要的frame,设置automask,如下图:

实际运行显示,根据不同屏幕,label的左右边距等比例缩放,且自适应宽高。效果图如下

代码布局使用autoresizingMaskt

关于在代码中使用autoresizingMask,我是百思不得其解,感觉设置了也没有起到效果,感觉就像设置了还要自己算frame,不像在xib中设置了来得实际。

参考:自动布局值autoresizingMask使用详情

不建议使用,感觉理解起来很复杂。

iOS布局-autoresizingMask相关推荐

  1. ios的AutoresizingMask

    在iOS应用的开发过程中,经常会使用,setFrame的方式对UIView进行布局, 经常会使用计算的方式,如self.view.bounds.size.height - 20-44- Heignt等 ...

  2. web端ios布局fixed元素软键盘唤起时fixed失效

    在ios上做了一个简单的页面头部置顶底部置顶源码如下: <!DOCTYPE html> <html lang="en"> <head><m ...

  3. iOS开发 autoResizingMask使用

    autoResizingMask 是UIView的一个属性,在一些简单的布局中,使用autoResizingMask,可以实现子控件相对于父控件的自动布局. autoResizingMask 是UIV ...

  4. ios布局 分为左右两块_安卓手机一年后卡顿,原因是安卓系统太开放了,改走iOS封闭之路...

    全球手机市场分为两大阵营,一个是安卓,一个是苹果.具体的说应该是安卓系统和苹果的iOS系统,不过我们国产手机大多数是使用的安卓系统,各家手机品牌的系统都是基于安卓架构优化布局而形成,然而苹果的iOS系 ...

  5. ios布局 分为左右两块_iOS 13 隐秘的细节④:系统组件·下

    新出的IOS13系统应该让非常多的设计师非常头疼,对比之前的系统存在哪些改变,设计师应该如何调整?本文从IOS13系统的隐秘细节出发,讲解了该系统的不一样,更好的帮助设计师快速了解新系统的调整,从而更 ...

  6. ios布局 分为左右两块_iOS 9之分屏多任务(Split View)

    代码示例:https://github.com/CocoonJin/SplitView 多任务(multitasking)算是iOS9中最引人瞩目的核心新特性了,之前越狱版用户就用过类似的插件,微软的 ...

  7. CHCR让iOS布局更婀娜

    传统方式布局的弊端 两个label同一行布局的时候,传统做法是将其中的一个label的宽度固定:另外一个label设置左右约束,让它跟随屏幕宽度拉伸压缩.如下的例子,我给商品数量Label加了一个60 ...

  8. iOS 布局 Masonry详解

    现在iPhone手机屏幕越来越多, 屏幕适配也越来越重要. Masonry就是为屏幕适配而生的三方框架. Masonry基础API mas_makeConstraints() 添加约束 mas_rem ...

  9. android storyboard,iOS中xib与storyboard原理,与Android界面布局的异同

    用文本标记语言来进行布局,用的最多的应该是HTML语言.HTML能够理解为有一组特殊标记的XML语言. 一.iOS中xib与storyboard显示原理 在iOS中基本的布置界面的方式有3种:代码.x ...

最新文章

  1. 对称加密与非对称加密
  2. svn 怎么直接同步指定服务器的某个文件夹
  3. php学习---环境搭建安装 编译器的安装
  4. 购房占比47.54%,数据揭秘女性偏爱婚前买房背后原因
  5. Stanford NLP
  6. 买房为什么要少出首付,多贷款?
  7. 强烈推荐 MicroSoft Office OneNote
  8. txt形式进行传输WebShell图文演示!
  9. 快速上手Linux核心命令(一):核心命令简介
  10. java 一切object_javaObject类
  11. 小米MIX4不会采用四曲面屏:结果未必是坏事
  12. lede旁路由作用_高频旁路电容器作用及工作原理
  13. 罗永浩回应被中消协点名;传前淘宝直播运营负责人因贪污被阿里通报;TypeScript 4.0 Beta发布​ | 极客头条...
  14. Hive 复杂数据类型之map
  15. 【GNN】R-GCN:GCN 在知识图谱中的应用
  16. 如何直接删除mysql中的重复数据_如何删除mysql数据库中重复的数据(部分重复)?...
  17. 时间格式 asp.net
  18. 正则表达式 10. 分组可选
  19. 算法:找出存在子字符串的最先位置28. Implement strStr()
  20. Vue实现动态路由导航

热门文章

  1. 编程猫python讲师面试_【编程猫教师面试】在BOSS问了我很多,问我为什么选择编程猫,问我了解编程猫吗?-看准网...
  2. js之操作JSON数据
  3. PostgreSQL client's startup packet different between logical and normal stream replication
  4. JNDI数据库连接池的配置
  5. [iOS] 在UIToolBar中增加UILabel等控件(xib/storyboard图形界面方式)
  6. 看麦田“蚂蚁网” 想网络新社区
  7. sql输出表中重复数据
  8. Idea 2018.2.5创建springboot项目依赖包没有的错误
  9. Java范例集锦(一)
  10. Android 学习历程摘要(一)