设为首页 加入收藏

TOP

自动布局(一)
2017-10-13 10:24:28 】 浏览:750
Tags:自动 布局

自动布局

1 什么是自动布局?

UI 根据不同尺寸的屏幕动态的布局控件大小.

2 作用

适配所有机型

3 布局中常用的参数

  • autoResizing就是一个相对于父控件的布局解决方法;由于它只能相对父控件布局;因此不能约束子控件之间关系. 所以出现了aotolayout,既可以设置父子控件之间的关系也可以设置同级控件之间的关系
  • 注: 在用autoResizing的时候需要关闭autoLayout和sizeclass,因为他们之间是互相冲突的.
  • Autolayout的作用非常明确:帮我们确定在不同设备、不同(父view)环境下,同一个可视单元所应具有合适的位置和尺寸,因此,当一个 UIView上所施加的约束能够唯一确定它的frame(x, y, width, height)的时候我们的自动布局的使用才是正确的
  • sizeClass: 对屏幕尺寸进行了抽象.

4 Autolayout的两条核心概念:

  >1 参照:通过参照其他控件或父控件来设置当前控件地位置和大小

  >2 约束Constraints(规则):通过添加约束限制控件地位置和大小

5 代码实现Autolayout的步骤:

 5.1 利用NSLayoutConstraint类创建具体的约束对象

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

- (void)addConstraint:(NSLayoutConstraint *)constraint;

- (void)addConstraints:(NSArray *)constraints;

5.3 代码实现Autolayout的注意点:?

> 要先禁止autoresizing功能,设置view的下面属性为NO

view.translatesAutoresizingMaskIntoConstraints = NO;

> 添加约束之前,一定要保证相关控件都已经在各自的父控件上

> 不用再给view设置frame

> 自动布局有个核心公式:

 obj1.property1 =(obj2.property2 * multiplier)+ constant value

6 自动布局的三种方法及优缺点

  • 纯代码

优点: 纯代码实现UI具有最好的代码重用性,也利用版本管理、代码追踪和代码的合并,大型项目大规模的使用。

缺点:纯代码实现存在的问题是开发周期长,代码的维护复杂以及自动布局AutoLayout困难

  • storyboard

优点: StoryBoard实现的优点主要凸显在开发周期短,代码量少,可以明确看到每个ViewController的布局样式和各个控制器之间的跳转关系。

缺点:当然它的弊端也显而易见,不合适多人协作开发,ViewController的重用和自定义view的实现.

  • XIB

优点: Xib的优势在于开发周期快而且版本的维护和纯代码差异性不大,易于维护。

缺点:它的劣势往往体现在Xib的设置往往不是最终的设置,终究会被纯代码所替代。Xib的使用注意点:尽量将xib的工作和代码的工作隔离开来:能够使用xib完成的内容就统一使用xib来做.

7 自动布局的实现

自动布局经过的三个时期

MagicNumber -> autoresizingMask -> autolayout

> 在iphone1-iphone3gs时代 window的size固定为(320,480) 我们只需要简单计算一下相对位置就好了

> 在iphone4-iphone4s时代苹果推出了retina屏 但是window的size不变

>在iphone5-iphone5s时代 window的size变了(320,568) 这时autoresizingMask 

> autoLayout自动布局是iOS6.0之后推出的,在6.0之前多使用autoresizingMasks属性,这个枚举类型的属性都是flexible(伸缩),在有了autoLayout之后这个就很少用了,可以不做了解。

StoryBoard和Xib设置约束在这里也不做具体的介绍,主要介绍三种手写代码设置约束的方法。

1、使用系统的NSLayoutConstraint实现

obj1.property1 =(obj2.property2 * multiplier)+ constant value

 multiplier和constant 就是向量系数和偏移量

1) 一个一个设置约束

-(void)addConstraint:(NSLayoutConstraint *)constraint;

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:_testView1 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:30]];

2) 一组一组设置约束

 - (void)addConstraints:(NSArray *)constraints;

[self.view addConstraints:@[

                                //上

                                [NSLayoutConstraint constraintWithItem:_testView1 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:30],

                

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS开发之--路径(keyPath)、键值.. 下一篇学习Coding-iOS开源项目日志(二)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目