一 概述

  • 用代码实现AutoLayout的步骤过程
  • AutoLayout约束规则
  • AutoLayout约束示例

二 用代码实现AutoLayout的过程

2.1 实现AutoLayout的过程

  • 通过代码创建要进行AutoLayout约束的View
  • View.translatesAutoresizingMaskIntoConstraints=NO;
  • 根据逻辑添加约束方法:constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1…
  • 添加约束对象到相应的view上

2.2 方法说明

创建约束对象的常用方法

+(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;

说明:

  • view1 :要约束的控件
  • attr1 :约束的类型(做怎样的约束)
  • relation :与参照控件之间的关系
  • view2 :参照的控件
  • attr2 :约束的类型(做怎样的约束)
  • multiplier :乘数
  • c :常量

自动布局有个核心公式:obj1.property1 =(obj2.property2 * multiplier)+ constant value

添加约束对象到相应的view上

- (void)addConstraint:(NSLayoutConstraint *)constraint;
- (void)addConstraints:(NSArray *)constraints;

注意点

  • 要先禁止autoresizing功能,设置view的下面属性为NO view.translatesAutoresizingMaskIntoConstraints = NO;
  • 添加约束之前,一定要保证相关控件都已经在各自的父控件上
  • 不用再给view设置frame

三 AutoLayout约束规则

在创建约束之后,需要将其添加到作用的view上

在添加时要注意目标view需要遵循以下规则:

3.1 对于两个同层级view之间的约束关系,添加到它们的父view上

3.2 对于两个不同层级view之间的约束关系,添加到他们最近的共同父view上

3.3 对于有层次关系的两个view之间的约束关系,添加到层次较高的父view上

四 AutoLayout约束示例

4.1 代码

#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];//1-添加两个控件到父空间上//1.1-蓝色ViewUIView *blueView=[[UIView alloc]init];blueView.backgroundColor=[UIColor blueColor];[self.view addSubview:blueView];blueView.translatesAutoresizingMaskIntoConstraints=NO;//1.2-红色ViewUIView *redView=[[UIView alloc]init];redView.backgroundColor=[UIColor redColor];[self.view addSubview:redView];redView.translatesAutoresizingMaskIntoConstraints=NO;//2-添加约束/** @Item:==first item,需要约束的条件* @attribute:需要设置的约束* @relatedBy==relation,等于* @toItem=second item,被参考的控件* @attribute:需要设置的约束* @multiplier:乘以* @constant:加上*///2.1 添加蓝色View距离父控件左边距固定为20--蓝色View的左边等于父控件的左边*1.0+20NSLayoutConstraint *blueViewLeft= [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:20];[self.view addConstraint:blueViewLeft];//2.2 添加蓝色View距离父控件右边距固定为20,--蓝色View的右边等于父控件的右边*1.0-20NSLayoutConstraint *blueViewRight= [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:-20];[self.view addConstraint:blueViewRight];//2.3 添加蓝色View距离父控件上边距固定为20,--蓝色View的上边等于父控件的上边*1.0+20NSLayoutConstraint *blueViewTop= [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:20];[self.view addConstraint:blueViewTop];//2.4 添加蓝色View高度为50,--蓝色View的高度等于50NSLayoutConstraint *blueViewHeight= [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0 constant:50];[self.view addConstraint:blueViewHeight];//3-设置红色View//3.1 红色View的高度和蓝色View的高度一样 高度--红色View的高度等于红色View的高度NSLayoutConstraint *redViewHeight= [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0];[self.view addConstraint:redViewHeight];//3.2 红色的右边和蓝色的右边对齐 x-红色View的右边等于红色View的右边NSLayoutConstraint *redViewRight= [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0];[self.view addConstraint:redViewRight];//3.3 红色的顶部和蓝色的地步距离固定 y-红色View的顶部等于红色View的底部+20NSLayoutConstraint *redViewTop= [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:20];[self.view addConstraint:redViewTop];//3.4 红色的宽度等于蓝色宽度的一般 宽度-红色View的宽度等于红色View的宽度*0.5NSLayoutConstraint *redViewWidth= [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeWidth multiplier:0.5 constant:0];[self.view addConstraint:redViewWidth];}
@end

4.2 效果图

竖屏 横屏

IOS开发之——屏幕适配-AutoLayout代码实现(03)相关推荐

  1. IOS开发之——屏幕适配-AutoLayout布局实现(02)

    一 概述 关于AutoLayout的几个概念 通过布局实现屏幕适配 二 关于AutoLayout的几个概念 2.1 什么是Autolayout Autolayout是一种"自动布局" ...

  2. iOS开发中屏幕旋转(二)

    Morris_ 2019.04.11 前面有总结过一些在开发中遇到的屏幕旋转的基础知识. 一.设置应用支持的转屏方向 设置方式 00x1 在TARGET->General->Deploym ...

  3. iOS开发 swift 3dTouch实现 附代码

    iOS开发 swift 3dTouch实现 附代码 一.What? 从iphone6s开始,苹果手机加入了3d touch技术,最简单的理解就是可以读取用户的点击屏幕力度大小,根据力度大小给予不同的反 ...

  4. xcode13 swift语言 ios开发 快捷代码优化方式(代码重构)例子

    xcode13 swift语言 ios开发 快捷代码优化方式(代码重构)例子 这是自己在CSDN上发的第二篇文章,开始用markdown编辑,更加美观一些. 问题描述 在用xcode swift语言开 ...

  5. iOS开发中屏幕旋转(一)

    Morris_ 2018.11.24 前言 最近做一个关于在线视频互动的iPad项目,部分界面只要横屏,部分界面可以横竖屏转换.看了看别家做的项目,有些是只做竖/横屏,有些是支持了横竖屏转换,在iPa ...

  6. ios 纯代码怎么适配ipad_iOS屏幕适配(纯代码)

    在iOS实际项目开发中, 我们经常要适配不同尺寸的屏幕,如iPhone4s,iPhone5/s,iPhone6/s,iPhone6Plus等. 在代码中创建一个控件如: UILabel *label ...

  7. iOS开发技巧 - Size Class与iOS 8多屏幕适配(一)

    0. 背景: 在iOS开发中,Auto Layout(自动布局)能解决大部分的屏幕适配问题. 但是当iPhone 6和iPhone 6 Plus发布以后, Auto Layout已经不能解决复杂的屏幕 ...

  8. IOS 开发 iPhone屏幕尺寸、分辨率及适配

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point ...

  9. iOS开发:兼容适配iPhone X

    打个硬广,少儿编程培训是我的副业,有加入我们在公众号留言! 本文转自:CocoaChina公众号推荐文章 屏幕 我们在编码中使用的是以point为单位的屏幕尺寸(在不同设备上每个point对应的实际像 ...

  10. iOS开发-iPhoneX的适配-iPhoneX屏幕适配分享

    文章感谢 PingWest品玩,奇点开发者@图拉鼎 iOS 11正式发布,原本bate版就很多坑,现在还没解决就正式发布了~内心也是酸爽的.除了代码上的坑,更恶劣的就是新的iPhone咯,看到iPho ...

最新文章

  1. 【C 语言】指针数据类型 ( 不允许向 NULL 地址写入数据 | 不允许不断地改变指针指向 | 字面量存放位置 )
  2. 成功解决FileNotFoundError: [Errno 2] No such file or directory: 'F:\\Program Files\\Python\\Python36\\li
  3. leetcode 1339. Maximum Product of Splitted Binary Tree | 1339. 分裂二叉树的最大乘积(树形dp)
  4. C语言万年历 年历月历日历都要,c语言万年历
  5. 谈谈基于SQL Server 的Exception Handlingp[下篇]
  6. 两个大屏可视化案例的布局与实现
  7. 剑指offer:滑动窗口的最大值(栈和队列)
  8. python刷b站教程_【Python】【学习资源】B站上的Python学习资源
  9. java向kafka推送数据_Java编写程序将数据存入Kafka中
  10. matlab axis函数_又是被Matlab整疯的一天!来学点简单操作!
  11. 深度卷积神经网络结构演变
  12. 【NOI2015】bzoj4199 品酒大会【解法一】
  13. “钓鱼”事件频发,您的企业邮件安全吗?
  14. MA5680T配置指导
  15. Apache安全漏洞
  16. 卷积神经网络学习路线(二十一) | 旷世科技 ECCV 2018 ShuffleNet V2
  17. 《使命召唤》官方秘籍
  18. 虾米音乐代码注释惊现“穷逼vip”程序员又背锅了
  19. 使用IKAnalyzer进行中文分词
  20. 长春哪个学校可以学习计算机编程的,长春编程学习,长春学编程的学校,长春学编程自学好还是报班好 - IT教育频道...

热门文章

  1. 基于Ubuntu的linux环境制作嵌入式SD/TF启动卡
  2. 【perl脚本】perl one line的几个有趣实例1
  3. 视频监控行业常用的几种分辨率(CIF/QCIF/DCIF/D1/HALF D1)对比解释
  4. python遗传算法工具箱的使用_Deap: python中的遗传算法工具箱
  5. 怎么用计算机 在名字中间打一个点,外国人名字中间的点怎么打 外国人的名字中间有...
  6. 反编译工具Reflector下载(转)
  7. 在线markdown文件转pdf
  8. Google Chrome Frame 自定义渲染方式,调用ActiveX
  9. 高性能Mysql(第三版)
  10. MySQL 分区表——《高性能MySQL》