autoLayout (相对布局)1()

//

//  ViewController.m

//  UI-AutoLayout

//

//  Created by Bruce on 15/9/6.

//  Copyright (c) 2015年 Bruce. All rights reserved.

//

/*

 frame  原点  自身的尺寸 来确定 自身位置

 

 autoLayout  根据参照视图的位置  来定义自己的位置

 

 

 autoLayout相对布局  约束视图和视图之间的关系 来分配 屏幕上的位置

 

 //     使用VFL(Visual Format Language  视觉格式语言)通过添加字符串 来约束视图和视图之间的关系

 

 使用autoLayout 必须把translatesAutoresizingMaskIntoConstraints禁用才可以使用

 相对布局是找一个参照物 拿参照物当做基础,设置他和参照物的相对距离 来设置自己的位置

 

 

 VFL:  需有 横 竖  两个方向 的约束

 横向: H:

 竖向: V:

 

 | 表示他的父视图

 -50- 两个视图之间的间距

 [textField] 是一个视图

 [textField(>=200)] (>=200) 如果是横向  表示textField自身的宽  最小是200

 

 

 H:横向

 | 表示他的父视图

 -50- 表示后面视图 与前面视图的距离 (后面视图是textField,前面视图是他的父视图)

 [textField(>=200)] 要约束视图的宽  (>=200)允许最小的宽度是200  如果是竖向  就是允许最小的高度

 

 @"H:|-50-[textField(>=200)]-50-|"

 

 距离坐边原点距离50   右边边界距离50    允许视图的最小宽度是200

 

 

 V: 竖向

 

 

 使用autolayout适配的时候   以最小尺寸设备  为基准

 

*/

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor = [UIColor brownColor];

[self demo1];

}

//一个视图

- (void)demo1

{

UIView *view = [[UIView alloc]init];

view.translatesAutoresizingMaskIntoConstraints = NO;

view.backgroundColor = [UIColor redColor];

[self.view addSubview:view];

NSDictionary *views = NSDictionaryOfVariableBindings(view);

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[view(>=100)]-100-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[view(>=100)]-300-|" options:0 metrics:nil views:views]];

}

//两个视图竖着排列

- (void)demo2

{

UIView *view = [[UIView alloc]init];

view.translatesAutoresizingMaskIntoConstraints = NO;

view.backgroundColor = [UIColor redColor];

[self.view addSubview:view];

UIView *view2 = [[UIView alloc]init];

view2.translatesAutoresizingMaskIntoConstraints = NO;

view2.backgroundColor = [UIColor blueColor];

[self.view addSubview:view2];

NSDictionary *views = NSDictionaryOfVariableBindings(view,view2);

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[view(>=100)]-100-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[view(>=100)]-400-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[view2(>=100)]-100-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-10-[view2(>=50)]-200-|" options:0 metrics:nil views:views]];

}

//三个视图  上面一个 下面两个

- (void)demo3

{

UIView *view = [[UIView alloc]init];

view.translatesAutoresizingMaskIntoConstraints = NO;

view.backgroundColor = [UIColor redColor];

[self.view addSubview:view];

UIView *view2 = [[UIView alloc]init];

view2.translatesAutoresizingMaskIntoConstraints = NO;

view2.backgroundColor = [UIColor blueColor];

[self.view addSubview:view2];

UIView *view3 = [[UIView alloc]init];

view3.translatesAutoresizingMaskIntoConstraints = NO;

view3.backgroundColor = [UIColor blueColor];

[self.view addSubview:view3];

NSDictionary *views = NSDictionaryOfVariableBindings(view,view2,view3);

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[view(>=100)]-100-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[view(>=100)]-400-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[view2(>=100)]-10-[view3]" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-10-[view2(>=50)]-200-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[view2]-10-[view3(>=100)]-10-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-10-[view3(>=50)]-200-|" options:0 metrics:nil views:views]];

}

//三个视图  上面一个 下面两个 下面两个 一般大

- (void)demo4

{

UIView *view = [[UIView alloc]init];

view.translatesAutoresizingMaskIntoConstraints = NO;

view.backgroundColor = [UIColor redColor];

[self.view addSubview:view];

UIView *view2 = [[UIView alloc]init];

view2.translatesAutoresizingMaskIntoConstraints = NO;

view2.backgroundColor = [UIColor blueColor];

[self.view addSubview:view2];

UIView *view3 = [[UIView alloc]init];

view3.translatesAutoresizingMaskIntoConstraints = NO;

view3.backgroundColor = [UIColor blueColor];

[self.view addSubview:view3];

NSDictionary *views = NSDictionaryOfVariableBindings(view,view2,view3);

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[view(>=100)]-100-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[view(>=100)]-400-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[view2(>=100)]-10-[view3]" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-10-[view2(>=50)]-200-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[view2]-10-[view3(view2)]-10-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-10-[view3(>=50)]-200-|" options:0 metrics:nil views:views]];

}

// 优化demo4

- (void)demo5

{

UIView *view = [[UIView alloc]init];

view.translatesAutoresizingMaskIntoConstraints = NO;

view.backgroundColor = [UIColor redColor];

[self.view addSubview:view];

UIView *view2 = [[UIView alloc]init];

view2.translatesAutoresizingMaskIntoConstraints = NO;

view2.backgroundColor = [UIColor blueColor];

[self.view addSubview:view2];

UIView *view3 = [[UIView alloc]init];

view3.translatesAutoresizingMaskIntoConstraints = NO;

view3.backgroundColor = [UIColor blueColor];

[self.view addSubview:view3];

NSDictionary *views = NSDictionaryOfVariableBindings(view,view2,view3);

NSArray *constraintsH = @[@"H:|-100-[view(>=100)]-100-|",@"H:|-10-[view2(>=100)]-10-[view3(view2)]-10-|",@"V:[view]-10-[view3(>=50)]-200-|"];

//    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[view(>=100)]-100-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[view(>=100)]-400-|" options:0 metrics:nil views:views]];

//    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[view2(>=100)]-10-[view3(view2)]-10-|" options:0 metrics:nil views:views]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-10-[view2(>=50)]-200-|" options:0 metrics:nil views:views]];

//    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[view2]-10-[view3(view2)]-10-|" options:0 metrics:nil views:views]];

for (int i=0; i<constraintsH.count; i++) {

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:constraintsH[i] options:0 metrics:nil views:views]];

}

//    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-10-[view3(>=50)]-200-|" options:0 metrics:nil views:views]];

}

//metrics 是一个字典 字典的键必须是出现在 VFL 语句中的字符串,值必须是 NSNumber 类型,作用是将在 VFL 语句中出现的键替换为相应的值

- (void)demo6

{

NSArray *titleList = @[@"用户名",@"密码",@"确认密码"];

for (int i=0; i<titleList.count; i++) {

UITextField *textField = [[UITextField alloc]init];

textField.translatesAutoresizingMaskIntoConstraints = NO;

textField.tag = i+100;

textField.placeholder = titleList[i];

textField.borderStyle = UITextBorderStyleLine;

[self.view addSubview:textField];

}

UITextField *accTextField = (UITextField *)[self.view viewWithTag:100];

UITextField *pswTextField = (UITextField *)[self.view viewWithTag:101];;

UITextField *isPswTextField = (UITextField *)[self.view viewWithTag:102];;

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

button.backgroundColor = [UIColor grayColor];

button.layer.cornerRadius = 5;

button.layer.masksToBounds = YES;

button.showsTouchWhenHighlighted = YES;

[button setTitle:@"注册" forState:UIControlStateNormal];

[self.view addSubview:button];

button.translatesAutoresizingMaskIntoConstraints = NO;

NSDictionary *views = NSDictionaryOfVariableBindings(accTextField,pswTextField,isPswTextField,button);

//    metrics 是一个字典 字典的键必须是出现在 VFL 语句中的字符串,值必须是 NSNumber 类型,作用是将在 VFL 语句中出现的键替换为相应的值

NSNumber *left = @50;

NSNumber *right = @50;

NSNumber *top = @60;

NSNumber *weight = @200;

NSNumber *height = @40;

NSNumber *jianju = @30;

//    metrics 是一个字典 字典的键必须是出现在 VFL 语句中的字符串,值必须是 NSNumber 类型,作用是将在 VFL 语句中出现的键替换为相应的值

NSDictionary *metrics = NSDictionaryOfVariableBindings(left,right,top,weight,height,jianju);

NSArray *VFList = @[@"H:|-left-[accTextField(>=weight)]-right-|",@"H:|-left-[pswTextField(>=weight)]-right-|",@"H:|-left-[isPswTextField(>=weight)]-right-|",@"H:|-left-[button(>=weight)]-right-|"];

for (int i = 0; i<VFList.count; i++) {

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:VFList[i] options:0 metrics:metrics views:views]];

}

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-top-[accTextField(>=height)]-jianju-[pswTextField(pswTextField)]-jianju-[isPswTextField(pswTextField)]-jianju-[button(pswTextField)]" options:0 metrics:metrics views:views]];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

时间: 2024-10-25 05:05:08

autoLayout (相对布局)1()的相关文章

AutoLayout代码布局使用大全—一种全新的布局思想

相信ios8出来之后,不少的ios程序员为了屏幕的适配而烦恼.相信不少的人都知道有AutoLayout 这么个玩意可以做屏幕适配,事实上,AutoLayout不仅仅只是一个为了多屏幕适配的工具, 它真正的意义所在是给了程序员一种全新的布局思想. 本文主要依据真实项目实例从三个方向全方位讲解AutoLayout的使用大全. 一.AutoLayout布局原理和语法 二.约束冲突和AutoLayout动画处理 三.AutoLayout布局思想,约束链的控制. 本文讲解的内容和代码主要依赖于一个名为UI

iOS界面布局之三——纯代码的autoLayout及布局动画

iOS界面布局之三--纯代码的autoLayout及布局动画 一.引言 关于界面布局,apple的策略已经趋于成熟,autolayout的优势在开发中也已经展现的淋漓尽致.除了使用storyBoard进行布局约束的拖拽,有时我们也需要在代码中进行autolayout的布局设置,Masonry库可以方便的创建约束属性,实际上,我们也没有必要再使用系统原生的代码来创建和设置约束,这篇博客只作为使用的方法备忘.前几篇布局介绍的链接如下: 使用autoresizing进行界面布局:http://my.o

autoLayout(相对布局)二

// //  ViewController.m //  UI-AutoLayout. // //  Created by Bruce on 15/9/7. //  Copyright (c) 2015年 Bruce. All rights reserved. //   #import "ViewController.h"   @interface ViewController ()   @end   @implementation ViewController   - (void)vi

iOS 美丽说瀑布流界面纯AutoLayout光速布局

最近在Github上看到三个库,分别是 GSKStretchyHeaderView,CHTCollectionViewWaterfallLayout ,JZNavigationExtension, 其中第一个是给CollectionView添加可动画的头部,添加方式和内容非常丰富,第二个是 瀑布流布局,第三个是UINavigationController的导航栏扩展.这三个东西厉害了啊,结 合起来咱们写个Demo,纯AutoLayout,效率非常高 (小弟搜集的好用的第三方库传送门:点击打开链接

Masonry -- 使用纯代码进行iOS应用的autolayout自适应布局

快速入门 安装 使用 CocoaPods 安装 pod 'Masonry' 推荐在你的在 prefix.pch 中引入头文件: // 定义这个常量,就可以在使用Masonry不必总带着前缀 `mas_`: #define MAS_SHORTHAND // 定义这个常量,以支持在 Masonry 语法中自动将基本类型转换为 object 类型: #define MAS_SHORTHAND_GLOBALS #import "Masonry.h" 使用 初始Masonry 这是使用MASCo

轻量级应用开发之(06)Autolayout自动布局

一 什么是Autolayout Autolayout是一种“自动布局”技术,专门用来布局UI界面的. 自IOS7 (Xcode 5)开始,Autolayout的开发效率得到很大的提高. 苹果官方也推荐开发者尽量使用Autolayout来布局UI界面. Autolayout能很轻松的解决屏幕适配的问题. 1. 关闭自动布局 打开面板(Main.storyboard)-> 点击 View Controller -> 取消 Use Auto Layout . 默认是  302 * 520 的尺寸,

AutoLayout自动适配(转载)

使用AutoLayout注意事项: (1)设置控件的translatesAutoresizingMaskIntoConstraints为NO. (2) constraintWithItem:(添加约束的控件) attribute:(设置限制的属性,如左,右,高度,宽度等) relatedBy:(大于,等于,小于) toItem:(第二个控件约束,如果无,nil) attribute:(第二个控件的约束属性) multiplier:(乘数,如1.0) constant:(增加的常量); (3)用V

更改配置 还原成老项目 不用手动进行布局了

今天通过配置启动图发现了一个能够不用适配竖屏应用的方法了 即能够不用Autolayout 就能够高速开发了 可是得有几个前提:1:必须将App Icon and Lauch Images 配置成这种 2:这样的仅仅针对竖屏App 3:   仅仅能在xib上面拖拽.不能用代码写,既不能写frame 4:项目必须配置默认的启动图片:(例如以下) 这些都配置好之后就能够随心所欲了 不用管所谓的适配了(已验证过了) 再提一遍:这是仅仅针对竖屏应用的 同一时候讲述一下我个人对适配的了解:1:Autolay

IOS Autolayout

●  Autolayout是一种"自动布局"技术,专门用来布局UI界面的 ●  Autolayout自iOS 6开始引入,由于Xcode 4的不给力,当时并没有得到很大推 广 ●  自iOS 7(Xcode 5)开始,Autolayout的开发效率得到很大的提升 ●  苹果官方也推荐开发者尽量使用Autolayout来布局UI界面 ●  Autolayout能很轻松地解决屏幕适配的问题 Autoresizing ● 在Autolayout之前,有Autoresizing可以作屏幕适配,