IOS开发之——屏幕适配-AutoLayout代码实现(03)
一 概述
- 用代码实现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)相关推荐
- IOS开发之——屏幕适配-AutoLayout布局实现(02)
一 概述 关于AutoLayout的几个概念 通过布局实现屏幕适配 二 关于AutoLayout的几个概念 2.1 什么是Autolayout Autolayout是一种"自动布局" ...
- iOS开发中屏幕旋转(二)
Morris_ 2019.04.11 前面有总结过一些在开发中遇到的屏幕旋转的基础知识. 一.设置应用支持的转屏方向 设置方式 00x1 在TARGET->General->Deploym ...
- iOS开发 swift 3dTouch实现 附代码
iOS开发 swift 3dTouch实现 附代码 一.What? 从iphone6s开始,苹果手机加入了3d touch技术,最简单的理解就是可以读取用户的点击屏幕力度大小,根据力度大小给予不同的反 ...
- xcode13 swift语言 ios开发 快捷代码优化方式(代码重构)例子
xcode13 swift语言 ios开发 快捷代码优化方式(代码重构)例子 这是自己在CSDN上发的第二篇文章,开始用markdown编辑,更加美观一些. 问题描述 在用xcode swift语言开 ...
- iOS开发中屏幕旋转(一)
Morris_ 2018.11.24 前言 最近做一个关于在线视频互动的iPad项目,部分界面只要横屏,部分界面可以横竖屏转换.看了看别家做的项目,有些是只做竖/横屏,有些是支持了横竖屏转换,在iPa ...
- ios 纯代码怎么适配ipad_iOS屏幕适配(纯代码)
在iOS实际项目开发中, 我们经常要适配不同尺寸的屏幕,如iPhone4s,iPhone5/s,iPhone6/s,iPhone6Plus等. 在代码中创建一个控件如: UILabel *label ...
- iOS开发技巧 - Size Class与iOS 8多屏幕适配(一)
0. 背景: 在iOS开发中,Auto Layout(自动布局)能解决大部分的屏幕适配问题. 但是当iPhone 6和iPhone 6 Plus发布以后, Auto Layout已经不能解决复杂的屏幕 ...
- IOS 开发 iPhone屏幕尺寸、分辨率及适配
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point ...
- iOS开发:兼容适配iPhone X
打个硬广,少儿编程培训是我的副业,有加入我们在公众号留言! 本文转自:CocoaChina公众号推荐文章 屏幕 我们在编码中使用的是以point为单位的屏幕尺寸(在不同设备上每个point对应的实际像 ...
- iOS开发-iPhoneX的适配-iPhoneX屏幕适配分享
文章感谢 PingWest品玩,奇点开发者@图拉鼎 iOS 11正式发布,原本bate版就很多坑,现在还没解决就正式发布了~内心也是酸爽的.除了代码上的坑,更恶劣的就是新的iPhone咯,看到iPho ...
最新文章
- 【C 语言】指针数据类型 ( 不允许向 NULL 地址写入数据 | 不允许不断地改变指针指向 | 字面量存放位置 )
- 成功解决FileNotFoundError: [Errno 2] No such file or directory: 'F:\\Program Files\\Python\\Python36\\li
- leetcode 1339. Maximum Product of Splitted Binary Tree | 1339. 分裂二叉树的最大乘积(树形dp)
- C语言万年历 年历月历日历都要,c语言万年历
- 谈谈基于SQL Server 的Exception Handlingp[下篇]
- 两个大屏可视化案例的布局与实现
- 剑指offer:滑动窗口的最大值(栈和队列)
- python刷b站教程_【Python】【学习资源】B站上的Python学习资源
- java向kafka推送数据_Java编写程序将数据存入Kafka中
- matlab axis函数_又是被Matlab整疯的一天!来学点简单操作!
- 深度卷积神经网络结构演变
- 【NOI2015】bzoj4199 品酒大会【解法一】
- “钓鱼”事件频发,您的企业邮件安全吗?
- MA5680T配置指导
- Apache安全漏洞
- 卷积神经网络学习路线(二十一) | 旷世科技 ECCV 2018 ShuffleNet V2
- 《使命召唤》官方秘籍
- 虾米音乐代码注释惊现“穷逼vip”程序员又背锅了
- 使用IKAnalyzer进行中文分词
- 长春哪个学校可以学习计算机编程的,长春编程学习,长春学编程的学校,长春学编程自学好还是报班好 - IT教育频道...
热门文章
- 基于Ubuntu的linux环境制作嵌入式SD/TF启动卡
- 【perl脚本】perl one line的几个有趣实例1
- 视频监控行业常用的几种分辨率(CIF/QCIF/DCIF/D1/HALF D1)对比解释
- python遗传算法工具箱的使用_Deap: python中的遗传算法工具箱
- 怎么用计算机 在名字中间打一个点,外国人名字中间的点怎么打 外国人的名字中间有...
- 反编译工具Reflector下载(转)
- 在线markdown文件转pdf
- Google Chrome Frame 自定义渲染方式,调用ActiveX
- 高性能Mysql(第三版)
- MySQL 分区表——《高性能MySQL》