[IOS]今天开始学UI---Autolayout

IOS研究成果——在autolayout 如何实现 Cell 的高度自适应 Hello,小编又来了,距离上次写博客都有一段日子了,主要是这个月一直在赶新项目,项目推了又改改了又推,需求被改无数,泪奔。。。但是在做项目的时候发现了好多小细节,等项目做完了就拿来给大家看看,好了,不再多废话了,回归我们今天的主题。其势 Autolayout 技术再 IOS6的时候就已经开始有了,但是大多数人还是习惯不了这个看起来奇特的东西,而且官方文档做到根本不是人看的,但是现在越来越多的人开始 阅读详情

AutoLayout可以做什么?

iphone,或者ipad屏幕的分辨率存在这多种款式,单纯的依靠frame布局来解决不同屏幕间的适配会给代码增加复杂性。

你可以拿到window的尺寸,然后经过各种繁琐的计算最后确定下合适的尺寸,但是这样会大大增加代码的复杂性,让布局称为一种额外的开销。AutoLayout很好的解决了这一问题。

AutoLayout是什么?

AutoLayout是一种基于约束的,描述性的布局系统。

基于约束:和以往定义frame的位置和尺寸不同,AutoLayout的位置确定是以所谓相对位置的约束来定义的,比如x坐标为superView的中心,y坐标为屏幕底部上方10像素等 ,尺寸也是可以通过相对尺寸调整,比如width为superView width的0.5倍。

描述性:约束的定义和各个view的关系使用接近自然语言或者可视化语言的方法来进行描述 。

布局系统:用来负责界面的各个元素的位置 ,AutoLayout为开发者提供了一种不同于传统对于UI元素位置指定的布局方法。以前,不论是在IB里拖放,还是在代码中写,每个UIView都会有自己的frame属性,来定义其在当前视图中的位置和尺寸。而使用AutoLayout,就变为了使用约束条件来定义view的位置和尺寸 。


在AutoLayout中主要使用的类是NSLayoutConstraint

约束定义了两个视图对象之间的关系,这种关系可以描述为:

y (relation) m * x + b 简记为 y R m * x + b  R可以是==    >=   <=

比如两个视图View A 和View B ,View B的左边起始在View A 右边起始位置偏移 15 的位置

关系可以描述为:View B’s left = View A’s right * 1.0+ 15

又或者View B的宽度是 View A宽度的一半

关系为:View B's width = View A's width * 0.5 + 0 


NSLayoutConstraint的初始函数1:

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

上面该方法 用英语描述的意思是  view1 的属性 关系 view2的属性的 multiplier 倍数 加上偏移

值得注意的是 view2 可以是nil 这样该公式也就变成 y R b

然后添加约束的对象一般是view1和view2的最近公有父视图


假如给View 1和View 2确定约束关系,那么关系是被添加进View 3。

如果给View 1和View 3确定约束关系,那么关系是被添加进View 3。 (可以自己是自己的父视图)

View 3和View 4不能确定约束关系 因为没有公有父视图。


下面来看一个例子,没有使用frame来确定绝对位置,而是靠的constraints确定的相对关系

效果图:并没有使用任何绝对定位布置完成



附代码 大部分常用语句使用了宏替换

#import "ViewController.h"

@interface ViewController ()    
@property (nonatomic,strong) UIView *view1;
@property (nonatomic,strong) UIView *view2;
@property (nonatomic,strong) UIView *view3;
@end

@implementation ViewController
#define PRELAYOUT(View) View.translatesAutoresizingMaskIntoConstraints = NO
#define ADDBORDER(View) {View.layer.cornerRadius=10;View.layer.borderWidth=2;View.layer.borderColor=[UIColor blackColor].CGColor;}
#define SETWIDTH(View)  [NSLayoutConstraint constraintWithItem:View attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeWidth multiplier:1.0/3.0 constant:0]
#define SETHEIGHT(View) [NSLayoutConstraint constraintWithItem:View attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeHeight multiplier:1.0/12.0 constant:0]
#define ADDCONSTRAINT() [self.view addConstraint:constraint]
- (void)viewDidLoad {
    [super viewDidLoad];
    //basic init view
    self.view.backgroundColor = [UIColor whiteColor];
    _view1 = [UIView new];
    _view1.backgroundColor = [UIColor orangeColor];
    PRELAYOUT(_view1);
    _view2 = [UIView new];
    _view2.backgroundColor = [UIColor greenColor];
    PRELAYOUT(_view2);
    _view3 = [UIView new];
    _view3.backgroundColor = [UIColor blueColor];
    PRELAYOUT(_view3);
    [self.view addSubview:_view1];
    [self.view addSubview:_view2];
    [self.view addSubview:_view3];
    NSLayoutConstraint *constraint = nil;
    //view1's  center is at self.view's (1*center.x,2.0/3.0*center.y)
    //view1's centerX = self.view's centerX * 1.0 + 0
    constraint = [NSLayoutConstraint constraintWithItem:_view1 attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
    ADDCONSTRAINT();
    //view1's centerY = self.view's cneterY * 2/3 + 0
    constraint = [NSLayoutConstraint constraintWithItem:_view1 attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:2.0/3.0 constant:0];
    ADDCONSTRAINT();
    //view1's width is 1/3 self.view's width ,and height as 1/12 self.view's heigth
    //view1's width = self.view's width * 1/3 + 0
    constraint = SETWIDTH(_view1);
    ADDCONSTRAINT();
    //view1's height = self.view's heigth * 1/12 + 0
    constraint = SETHEIGHT(_view1);
    ADDCONSTRAINT();
    ADDBORDER(_view1)
    //view2 is relate to view 1 and same size as view 1
    //view2's centerX = view1's left * 1 - 20
    constraint = [NSLayoutConstraint constraintWithItem:_view2 attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:_view1 attribute:NSLayoutAttributeLeft multiplier:1.0 constant:-20];
    ADDCONSTRAINT();
    //view2's centerY = view1's bottom * 1 + 80
    constraint = [NSLayoutConstraint constraintWithItem:_view2 attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:_view1 attribute:NSLayoutAttributeBottom multiplier:1.0 constant:80];
    ADDCONSTRAINT();
    constraint = SETWIDTH(_view2);
    ADDCONSTRAINT();
    constraint = SETHEIGHT(_view2);
    ADDCONSTRAINT();
    ADDBORDER(_view2)
    //view 3 is relate to view 2 and same size as view 1
    //view3's left = view2's right * 1 + 40
    constraint = [NSLayoutConstraint constraintWithItem:_view3 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:_view2 attribute:NSLayoutAttributeRight multiplier:1.0 constant:40];
    ADDCONSTRAINT();
    //view3's centerY = view2's centerY * 1 +0
    constraint = [NSLayoutConstraint constraintWithItem:_view3 attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:_view2 attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0];
    ADDCONSTRAINT();
    constraint = SETWIDTH(_view3);
    ADDCONSTRAINT();
    constraint = SETHEIGHT(_view3);
    ADDCONSTRAINT();
    ADDBORDER(_view3)

}


@end

NSLayoutConstraint的初始函数2:

+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;

有一种更简易的方式提供了AutoLayout,那就是VFL(Visual Format Layout)。

以单纯的语句抽象出各视图间的关系。

format是 VFL字符串 具体规定了如何布局

opts 则是布局以何种方式对齐

metrics 则是在字符串中出现的常量字典

views 则是字符串中出现的视图字典


VFL字符串的结构可以表示为

(<orientation>:)? (<superview><connection>)? <view>(<connection><view>)* (<connection><superview>)?

?表示括号内内容可以出现0次或者多次

<oreitentation:>? :规定了布局的方向 分别为V:垂直 从上而下 H:水平 从左至右

<superview>: 用"|"表示 表示字符串中出现视图的父视图

<connection>:可以用不写 即为空 为空 :则下一个视图紧贴着之前视图的右边布局

单个"-"表示,表示预留系统默认间隔 子视图之间(siblings)同级之间 间隔8   子视图和父视图之间间隔为 20

用"- n -"表示,n代表了常数 或者常数名,表示视图间间隔n距离

<view>:用"[viewname]" 来表示 视图 用viewname 就是视图的名字


比如H:|-[view1]-20-[view2]|

可以解释为 在水平方向上 从左至右

①view1间隔在父视图左边的默认距离出布局

②view1 和 view2 之间间隔 20个距离

③view2 紧贴父视图的右边

通过以上基本上就可以确定了位置,但是view1 和view2的宽度 是不定的取决于系统

如果你想要view1 至少100宽,至多150

那么就可以写作如下形式

H:|-[view1(>=100,<=150)]-20-[view2]|

又或者你想要view1和view2 一样宽 可以写作

H:|-[view1(view2)]-20-[view2]|

如果要完成和之前类似的布局 用VFL该怎么做呢?

效果图:


代码:

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic,strong) UIView *view1;
@property (nonatomic,strong) UIView *view2;
@property (nonatomic,strong) UIView *view3;
@end
#define PRELAYOUT(VIEW) VIEW.translatesAutoresizingMaskIntoConstraints = NO
#define ADDBORDER(VIEW) {VIEW.layer.cornerRadius=10;VIEW.layer.borderWidth=2;VIEW.layer.borderColor=[UIColor blackColor].CGColor;}
#define ADDCONSTRAINTS() [self.view addConstraints:constraints]
#define CONSTARINTS(FORMAT)  constraints =[NSLayoutConstraint constraintsWithVisualFormat:FORMAT options:0 metrics:nil views:views]
#define VIEWINIT(VIEW,COLOR) {VIEW = [UIView new];VIEW.backgroundColor = COLOR;PRELAYOUT(VIEW);ADDBORDER(VIEW);}

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //basic init view
    self.view.backgroundColor = [UIColor whiteColor];
    VIEWINIT(_view1, [UIColor orangeColor])
    VIEWINIT(_view2, [UIColor greenColor])
    VIEWINIT(_view3, [UIColor blueColor])
    [self.view addSubview:_view1];
    [self.view addSubview:_view2];
    [self.view addSubview:_view3];
    //    NSLayoutConstraint *constraint = nil;
    NSArray *constraints = nil;
    NSDictionary *views = NSDictionaryOfVariableBindings(_view1,_view2,_view3);
    CONSTARINTS(@"V:|-180-[_view1(==50)]");
    ADDCONSTRAINTS();
    CONSTARINTS(@"H:|-130-[_view1]-130-|");
    ADDCONSTRAINTS();
    CONSTARINTS(@"V:[_view1]-50-[_view2(_view1)]");
    ADDCONSTRAINTS();
    CONSTARINTS(@"V:[_view1]-50-[_view3(_view1)]");
    ADDCONSTRAINTS();
    CONSTARINTS(@"H:|-50-[_view2]-40-[_view3(_view2)]-50-|");
    ADDCONSTRAINTS();

}
@end

使用VFL可能在精细度上没有前一种方式高,但是优点在于可视直观快速便捷。


在使用代码自动布局的过程中强烈推荐宏定义 这样就可以省去很多事。

也可以大大压缩代码

不过编译时慢,对运行无影响。

这里一个系统内部宏

#define NSDictionaryOfVariableBindings(...) _NSDictionaryOfVariableBindings(@"" # __VA_ARGS__, __VA_ARGS__, nil)
是用来根据视图名字创建视图的字典映射

比如NSDictionaryOfVariableBindings(_view1,_view2,_view3);

所创建出来的字典就是@{"_view1":_view1,"_view2":_view2,"_view3":_view3}

简单但说就是在解析VFL语句的时候 替换掉其中的_view1这些字符的


顺便一说metrics 也是可以这么用的 在metrics字典中存在"width":100,"spacing":20

如果在VFL语句中使用 就是下面的形式

H:[view1(==width)]-spacing-[view2(==width)]

等同于

H:[view1(==100)]-20-[view2(==100)]


VFL和之前约束是等同的,只是提供了一种快速创建约束的方式


最后来讲优先级的问题

enum {
UILayoutPriorityRequired = 1000, // Required 

UILayoutPriorityDefaultHigh = 750, // Compression resistance default 

UILayoutPriorityDefaultLow = 250, // Compression hugging default 

UILayoutPriorityFittingSizeLevel = 50, // System layout fitting size
};
typedef float UILayoutPriority;

优先级可以从1-1000

自动布局总是优先级比较高的布局 我们所创建的约束默认都是1000的优先级。

当两个约束冲突的时候,就会先满足高优先级的。

优先级的数值可以自己定义 比如751 999 等




最后再来一个VFL字符串的总结:

类型格式 例子
水平,垂直布局H: or V: V:[view1]-15-[view2]
视图[item][view1]
父视图| H:|[view1]|
关系== or >= or <=H:[view1]-(>=20)-[view2]
metricsmetricH:[view1(<=width)]
无间隔[item][item]H:[view1][view2]
弹性间隔[item]-(>=0)-[item][view1]-(>=0)-[view2]
固定间隔[item]-gap-[item]V:[view1]-20-[view2]
固定宽高[item(size)][item(==size)] [view1(50)]
优先级@value [view1(<=50@20)]
   
   











ESP32连接OneNet云平台实现多设备联动控制完整示例 通过esp32连接onenet云平台,实现远程设备间的智能联动控制,利用MQTT协议完成数据通信,esp32连接onenet云平台后可高效稳定地上传与下发指令,提升物联网系统响应速度与自动化水平。 阅读详情

相关推荐

Lenovo 拯救者15ISK硬件升级实战:从内存到固态硬盘的全面优化

本文详细介绍了为联想拯救者15ISK笔记本电脑进行硬件升级的完整实战指南。通过评估升级可行性,指导如何挑选兼容的内存条与NVMe固态硬盘,并提供详细的拆机安装步骤与系统安装避坑技巧。升级后,笔记本的开机速度、软件加载及多任务处理能力获得飞跃式提升,让老旧设备重获新生。

weixin_29310631的博客 554

深入理解Auto Layout 第一弹

本文转载至http://zhangbuhuai.com/2015/07/16/beginning-auto-layout-part-1/ By张不坏 2015-07-16更新日期:2015-07-17 文章目录 1.写在前面 2.iOS布局机制 3.几个重要的API 3.1.intrinsicContentSize方法 3.2.preferredMa...

a1311010193的博客 304

图文带你理解什么是Few-shot Learning

Few-shot Learning(少样本学习)是Meta Learning(元学习)中的一个实例1,所以在了解什么是Few-shot Learning之前有必要对Meta Learning有一个简单的认识。不过在了解什么是Meta Learning之前还是要了解一下什么是Meta。因此,阅读本文后你将对如下知识有一个初步的了解。 What is Meta What is Meta Learning What is Few-shot Learning 1. What is Meta? meta就是描述

Pr4da的博客 1万+

iOS-谈一谈自适应Cell的高度缓存

目录 系统如何计算的自适应高度? 系统计算的行高会不会被缓存? 如何缓存? 前几天读文档的时候发现一对方法 - (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize NS_AVAILABLE_IOS(6_0);  - (CGSize)systemLayoutSizeFittingSize:(CGSize)ta...

马甲包开发审核交流群:869685378 833

学习笔记7--激光雷达标定

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》,笔者不是自动驾驶领域的专家,只是一个在探索自动驾驶路上的小白,此系列丛书尚未阅读完,也是边阅读边总结边思考,欢迎各位小伙伴,各位大牛们在评论区给出建议,帮笔者这个小白挑出错误,谢谢! 此专栏是关于《自动驾驶汽车环境感知》书籍的笔记。 2.激光雷达标定 2.1 概述 激光雷达内参标定:内部激光发射器坐标系与雷达本

FUXI_Willard 8025

告别代码丢失!用Git+Gitee管理你的Keil5单片机项目(保姆级图文教程)

本文详细介绍了如何利用Git和Gitee高效管理Keil5单片机项目,解决嵌入式开发中的代码丢失问题。通过精准配置.gitignore文件、设计适合团队的协作流程以及搭建安全备份体系,开发者可以轻松实现版本控制,提升工作效率。特别针对Keil工程的特殊文件类型,提供了实用的过滤规则和操作技巧。

weixin_33686714的博客 470

iOS 谈一谈自适应Cell的高度缓存

系统如何计算的自适应高度? 系统计算的行高会不会被缓存? 如何缓存? 前几天读文档的时候发现一对方法 - (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize NS_AVAILABLE_IOS(6_0); - (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHoriz...

H.A.N的博客 1066

告别混乱!用Cadence Capture CIS高效管理你的原理图库:以单逻辑器件K9F2G08U0M为例

本文以单逻辑器件K9F2G08U0M为例,详细介绍了如何使用Cadence Capture CIS高效管理原理图库。通过三级分类体系、工程化命名规范和智能检索技术,帮助工程师实现从混乱到有序的转变,提升团队协作效率和设计准确性。

aizhi0169的博客 400

systemLayoutSizeFittingSize

转:https://www.crifan.com/ios_layout_systemlayoutsizefittingsize/ 看: feiin/swiftmi-app: swiftmi.com app版本 采用Swift实现 的源码中看到了: <code> let...

2029

智能测试策略优化:平衡覆盖率、时间和资源

在软件开发过程中,测试是确保软件质量的关键环节。然而,测试工作往往面临着诸多挑战,其中如何在保证测试覆盖率的前提下,合理分配时间和资源是一个核心问题。本文章的目的在于探讨智能测试策略的优化方法,帮助软件测试团队在有限的时间和资源条件下,实现尽可能高的测试覆盖率。文章的范围涵盖了智能测试策略的核心概念、算法原理、数学模型、实际应用案例以及相关工具和资源等方面。本文将按照以下结构进行组织:首先介绍智能测试策略优化的背景和相关概念,包括核心术语和缩略词的定义;

AIGC应用创新大全的博客 620

【二 Deepseek+Coze案例】【 2.2 Coze + Deepseek 实现小红书爆款笔记:打造专属Agent智能体】

摘要 本文介绍了如何利用Coze平台和Deepseek模型构建自动化Agent智能体,用于生成和优化小红书爆款笔记。文章首先分析了爆款笔记的核心特征,包括精准定位、吸引标题、实用内容、精美排版和热门标签。随后提出Agent智能体的功能需求,涵盖热点追踪、内容生成与优化、数据分析及自动发布等模块。在技术实现上,详细阐述了从环境配置、数据采集到内容生成与优化的全流程,并提供了Python代码示例,展示如何调用Coze函数获取热点数据及竞品笔记。该方案通过智能化的内容创作与运营策略,帮助用户高效打造高曝光的小红书

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 2272

记录一个自动算高的问题

CGFloat height = [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; 通过以上方法,模拟器上面可以正确得到高度,但是真机4s + 7.0的系统,确始终返回0,最后在这里面找到答案 http://stackoverflow.com/questions/17576005/calling-u

iCash 3131

TC3XX - MCAL知识点(三十八):AURIX™ TC3xx 的EDSADC实现旋变解码功能(理论知识+手册阅读)

本文系统梳理了英飞凌AURIX系列芯片EDSADC模块的技术手册内容。首先概述了该模块的架构特点,包括模拟/数字输入通道和总线地址信息。重点解析了手册中的关键知识点:1)模拟量输入的差分/单端模式;2)数字量连接的触发、数据源和时钟源选择;3)功能配置中的寄存器操作注意事项;4)输入通道的三种数据来源模式;5)滤波器链的组成和工作原理;6)旋变应用中的载波信号生成和延迟补偿机制。最后对SRM、SAUL、SBLL等专业术语进行了详细解释。全文为理解EDSADC模块的硬件特性和配置方法提供了系统的技术参考。

梦想技术家 590

开始iOS 7中自动布局教程(一)

原文:Beginning Auto Layout Tutorial in iOS 7: Part 1 感谢翻译小组成员@answer-huang(博客)热心翻译。如果您有不错的原创或译文,欢迎提交给我们,更欢迎其他朋友加入我们的翻译小组(联系qq:2408167315)。...

chuangxie3049的博客 129

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Xcode6下学习autolayout 一

iOS8来了,Xcode也升级到6了,可是我连autolayout,甚至storyboard都不会用。 手工码代码都是通过宏定义来适配界面的,所以在iOS7出来的时候也没有变更搭UI的习惯。现在iOS8出来了,sizeclass autolayout一时间铺天盖地。下的我半死,感觉自己落伍了。赶紧的要学习storyboard,autolayout。。。 不过直到今天才终于有时间看下autola

一只叫花花的猪的专栏 2940

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

结合AutoLayout实践iOS8上UITableViewCell高度的自适应

上一次写博客已经是4个月之前了,不是不想写,只是没找到太合适的题目,本人秉着宁缺毋滥的原则...... 好吧,我承认是我懒惰了; 四个月,虽然陆续提交了几个项目,但是收获不大;与此同时,随着公司人事比较大的变动,我也重新找到了自己的位置,希望自己能百尺竿头,更进一步^_^ 今天想写的题目已经表示出来了,灵感的来源是“iOS进阶指南试读之UI篇”这篇文章,正好下午没事就实践了一下,下面就把实践

baby_hua的专栏 4978

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

如何使用AutoLayout以编程方式为iOS构建Spotify克隆:添加照片和更新UI

This is the second part of an article on building a Spotify UI clone with autoLayout programmatically. If you missed the first part, no worries - just please go and check it now. 这是关于以编程方式使用autoLayou...

210

Autolayout 下的 Animation

习惯了用 autosizing masks 来布局UI,感觉用起来又快又熟,但在支持多尺寸屏幕适配下,还是需要使用Autolayout(以及 iOS8 出来的sizeclass)。而为了用户体验,我们又经常用到Animation,如改变一个View的高度,常用方式是: [UIView animateWithDuration:.5f animations:^{

wwmusic的专栏 3413

探索Autolayout的无限可能:Masonry实战指南

探索Autolayout的无限可能:Masonry实战指南 在这个快速发展的iOS开发领域,界面布局的重要性不言而喻。Autolayout作为苹果提供的强大工具,能帮助开发者创建自适应、灵活的用户界面。然而,对于初学者来说,它可能会显得有些复杂。这就是我们今天要介绍的开源项目——AutolayoutExampleWithMasonry 的价值所在。 1、项目介绍 该项目是一个生动的Autolayo...

gitblog_00051的博客 336

AutoLayout详解

在一些群里看到很多朋友还是停留在Frame布局的痛苦时代,今天小编在这里和你讲述一下苹果推荐的布局方式AutoLayout.AutoLayout是什么? Autolayout是一种布局技术,专门用来布局UI界面的。用来取代Frame布局在遇见屏幕尺寸多重多样的不足 Autolayout自iOS6开始引入,由于Xcode4的不给力,当时并没有得到很大的推广 在iOS7(

Scott_Mr 的专栏 786

iOS UI基础学习 Note_daySeven

断更了那么多天,期间去兼职搬砖了几天,与友人聚了一段时间还有就是看了一部电视剧 晃眼22天,期间学了屏幕适配(Autoresizing和Autolayout)的做法还有UITableView 今天开始就继续记录和分享学习过程吧,刚好今天没课可以整理一下知识点屏幕适配首先从苹果的屏幕适配的历史开始讲起吧,从苹果的1-4s 所有iPhone都是3.5 inch 所以以前设置控件的位置直接在frame中写

Gerhart的博客 632

从此爱上iOS Autolayout

转:从此爱上iOS Autolayout 这篇不是autolayout教程,只是autolayout动员文章和经验之谈,在本文第五节友情链接和推荐中,我将附上足够大家熟练使用autolayout的教程。这篇文章两个月前就想写下来,但因为一直工作较多,没有时间来完成。今天终于狠下心,丢下代码不写,来完成他吧! 一、别和我提Autolayout,我想死!! 从iOS6/xcode4开始...

weixin_30544657的博客 86

iOS开发日记30-Autolayout

今天博主有一个Autolayout的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 1、概述 在以前的iOS程序中,是如何设置布局UI界面的? (1)经常编写大量的坐标计算代码 (2)为了保证在3.5 inch和4.0 inch屏幕上都能有完美的UI界面效果,有时还需要分别为2种屏幕编写不同的坐标计算代码(即传说中的“屏幕适配”) 什么是Autolayout? ...

weixin_30954607的博客 60

ios之Autolayout的运用

都说换一家公司就学多点东西,这句话果然不假,去了新公司见识了新一套的代码后学到了不少,诚然不能说是旧公司的代码太陈旧,因为新公司虽然技术新颖,可是也有其不足的地方,其细节就不一一诉说,今天主要是聊聊新公司代码让我学到的两个方面之一——Autolayout的运用。(还有一个方面是git对比SVN的优势,此对比迟点另开一篇文章诉说) 一开始来到公司发现大部分界面都是用纯代码构建,不适应之余还发现控件之间

yy35hh的专栏 582

使用AutoLayout动态计算UITableViewCell高度

公司最近要用到autoLayout,今天

lcg0412的专栏 8180

IOS开发教程第一季之01UI基础day10合并IOS学习011布局与屏幕适配(完结)

1.AutoLayout autoResizing通过父容器的大小来进行大小的适配。子控件的frame不再写死。而是使用参照 以后主要使用autoLayout布局 不仅通过针对父容器的大小位置,还要考虑容器与容器之间的相对位置和相对大小来进行布局。 使用size classes+AutoLayout针对不同屏幕运用不同规则 PS:autoresizing和autolayout是互斥的 ...

weixin_43745804的博客 191
上一篇: [IOS]CoreAnimation动画效果示例
下一篇: [AFNetworking]源代码分析--AFURLRequestSerialization.h
HeapStackk
博客等级 码龄12年 11粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值