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)viewDidLoad {

    [super viewDidLoad];

    

    [self demo5];

}

 

//一个视图

- (void)demo1

{

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

//    如果需要使用autoLayout   translatesAutoresizingMaskIntoConstraints 必须禁用

    view.translatesAutoresizingMaskIntoConstraints = NO;

    view.backgroundColor = [UIColor redColor];

    [self.view addSubview:view];

    

//    VFL  横向 竖向布局

//    @"H:" 设置横向布局

//    @"V:" 设置竖向布局

    

//    设置横向布局 距离参照视图的左侧边距

//    @"H:|-20-"

//    @"H:[view]-20-"

    

//    @"H:|-20-[view(200)]" view的宽  永远是200

//    @"H:|-20-[view(otherView)]" view的宽  与otherView的宽相同

//    @"H:|-20-[view(>=200)]" 设置横向布局 距离参照视图的左侧边距 设置view横向的尺寸 不能低于200

    

//    @"H:|-20-[view(>=200)]-20-|" 设置横向布局 距离参照视图的左侧边距 设置view横向的尺寸 不能低于200 设置右侧与参照视图之间的间距

    

//    视图 使用属性的时候   绑定key  需要绑定它真实的名字  _titleLable

//    self.titleLable = _titleLable

 

    

//    @"H:|-20-" 设置横向布局 距离父视图的左侧边距

//    @"H:|-20-[view(>=200)]" 设置横向布局 距离父视图的左侧边距 设置view横向的尺寸 不能低于200

//    @"H:|-20-[view(>=200)]-20-|" 设置横向布局 距离父视图的左侧边距 设置view横向的尺寸 不能低于200 设置右侧与父视图之间的间距

    

//    竖向布局@"V:|-40-[view(>=200)]-20-|"

    

//    使用VFL  需把视图的对象(视图) 与 他的名字(字符串) 绑定起来

    NSDictionary *views = NSDictionaryOfVariableBindings(view);

    

//    给 self.view 和 view 添加约束

//    addConstraints 添加约束

//    NSLayoutConstraint 添加 具体约束的一个类

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

//    format:VFL

//    opts:同意按照某个方向去布局

//    metrics:绑定的参数

//    views:绑定视图的参数

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

    

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

}

 

//两个视图的布局

- (void)demo2

{

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

    //    如果需要使用autoLayout   translatesAutoresizingMaskIntoConstraints 必须禁用

    view.translatesAutoresizingMaskIntoConstraints = NO;

    view.backgroundColor = [UIColor redColor];

    [self.view addSubview:view];

    

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

    //    如果需要使用autoLayout   translatesAutoresizingMaskIntoConstraints 必须禁用

    view1.translatesAutoresizingMaskIntoConstraints = NO;

    view1.backgroundColor = [UIColor yellowColor];

    [self.view addSubview:view1];

    

    

    NSDictionary *views = NSDictionaryOfVariableBindings(view,view1);

    

//    红色view的约束

//    @"H:|-20-[view(>=200)]-20-|"

//    @"V:|-40-[view(50)]-10-[view1]"

    

//    黄色view1约束

//    @"H:|-20-[view1(>=200)]-20-|"

//    @"V:[view]-10-[view1(50)]"

    

//    红色view横向的约束

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

//    红色view竖向的约束

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

    

//    黄色view1横向的约束

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

//    黄色view1竖向的约束

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-10-[view1(50)]" options:0 metrics:nil views:views]];

}

 

 

//两个视图的布局 优化demo2

- (void)demo3

{

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

    //    如果需要使用autoLayout   translatesAutoresizingMaskIntoConstraints 必须禁用

    view.translatesAutoresizingMaskIntoConstraints = NO;

    view.backgroundColor = [UIColor redColor];

    [self.view addSubview:view];

    

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

    //    如果需要使用autoLayout   translatesAutoresizingMaskIntoConstraints 必须禁用

    view1.translatesAutoresizingMaskIntoConstraints = NO;

    view1.backgroundColor = [UIColor yellowColor];

    [self.view addSubview:view1];

    

    

    NSDictionary *views = NSDictionaryOfVariableBindings(view,view1);

    

    //    红色view的约束

    //    @"H:|-20-[view(>=200)]-20-|"

    //    @"V:|-40-[view(50)]-10-[view1]"

    

    //    黄色view1约束

    //    @"H:|-20-[view1(>=200)]-20-|"

    //    @"V:[view]-10-[view1(50)]"

    

    //    红色view横向的约束

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

    

//    红色view 黄色view1 都在同一个父视图 而且两个视图之间 又有关系

    //    红色view 黄色view1 竖向的约束

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

    

//    红色view 黄色view1 两个视图的高度 都是50

//    [view1(view)]

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

    

    //    黄色view1横向的约束

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

    //    黄色view1竖向的约束

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

}

 

//再次优化 demo2

- (void)demo4

{

    NSArray *colorList = @[[UIColor redColor],[UIColor yellowColor]];

    

    for (int i=0; i<2; i++) {

        

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

        view.backgroundColor = colorList[i];

        view.translatesAutoresizingMaskIntoConstraints = NO;

        view.tag = 10+i;

        [self.view addSubview:view];

        

    }

    

    UIView *redView = [self.view viewWithTag:10];

    UIView *yellowView = [self.view viewWithTag:11];

    

    NSDictionary *views = NSDictionaryOfVariableBindings(redView,yellowView);

    

//    两个视图 横向的约束

    NSArray *constraints = @[@"H:|-20-[redView(>=200)]-20-|",@"H:|-20-[yellowView(>=200)]-20-|"];

    

    for (NSString *VFL in constraints) {

        

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

    }

    

//    两个视图的竖向约束

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[redView(50)]-10-[yellowView(redView)]" options:0 metrics:nil views:views]];

}

 

//三个视图

- (void)demo5

{

    NSArray *colorList = @[[UIColor redColor],[UIColor yellowColor],[UIColor blueColor]];

    

    for (int i=0; i<3; i++) {

        

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

        view.translatesAutoresizingMaskIntoConstraints = NO;

        view.backgroundColor = colorList[i];

        view.tag = 10+i;

        [self.view addSubview:view];

        

    }

    

    UIView *redView = [self.view viewWithTag:10];

    UIView *yellowView = [self.view viewWithTag:11];

    UIView *blueView = [self.view viewWithTag:12];

    

    NSDictionary *views = NSDictionaryOfVariableBindings(redView,yellowView,blueView);

    

//    @"H:|-20-[redView>=200]-20-|"

//    @"H:|-20-[yellowView>=100]-10-[blueView(yellowView)]-20-|"

    

    NSArray *HList = @[@"H:|-20-[redView(>=200)]-20-|",@"H:|-20-[yellowView(>=100)]-10-[blueView(yellowView)]-20-|"];

    

//    红色视图与黄色视图竖向的关系,红色视图与蓝色视图竖向的关系

    NSArray *VList = @[@"V:|-40-[redView(50)]-10-[yellowView(redView)]",@"V:[redView]-10-[blueView(redView)]"];

    

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

        

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

        

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

        

    }

    

}

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

@end

 

时间: 2024-10-17 10:04:24

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

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

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

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

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

autoLayout (相对布局)1()

// //  ViewController.m //  UI-AutoLayout // //  Created by Bruce on 15/9/6. //  Copyright (c) 2015年 Bruce. All rights reserved. // /*  frame  原点  自身的尺寸 来确定 自身位置    autoLayout  根据参照视图的位置  来定义自己的位置      autoLayout相对布局  约束视图和视图之间的关系 来分配 屏幕上的位置    //  

【ALearning】第四章 Android Layout组件布局(二)

前面我们分别介绍和学习了LinearLayout(线性布局).FrameLayout(单帧布局)和AbsoluteLayout(绝对布局).这次我们要进行RelativeLayout(相对布局)和TableLayout(表格布局)的学习.这部分是很重要的知识点.RelativeLayout是开发过程中强烈建议使用的,而TableLayout是满足一些特定需求时(常见表格显示,但不局限于此)需要使用. [博客专栏:http://blog.csdn.net/column/details/alearn

Android常用界面布局(二)

ImageView ScaleType属性, 该属性用以表示显示图片的方式 ①matrix               根据一个3x3的矩阵对其中图片进行缩放 ②fitXY                  将图片非等比例缩放到大小与ImageView相同 ③fitStart               缩放方式同FIT_CENTER,只是将图片显示在左方或上方,而不是居中 ④fitCenter           ImageView的默认状态,大图等比例缩小,小图等比例放大,整体居中显示在Im

蓝鸥零基础学习HTML5第八讲 样式布局二

蓝鸥零基础学习HTML5第八讲 样式布局二 1.定位的属性及特性 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <style> #box1 { width:400px; height:400px; border:10px solid red; margin:0 auto; position: re

iOS 8 UI布局 AutoLayout及SizeClass(二)

一.新特性Size Class介绍 随着iOS8系统的发布,一个全新的页面UI布局概念出现,这个新特性将颠覆包括iOS7及之前版本的UI布局方式,这个新特性就是Size Class.Size Class配合Auto Layout可以解决所有(包括iPhone及iPad)iOS设备屏幕尺寸及屏幕旋转时候的UI适配问题 . 二.为什么要使用Size Class 直到iPhone6发布后,目前iOS设备的屏幕尺寸已经有4种了,如图: iPhone6没出现之前,还可以通过代码来适配两种尺寸的UI,但iP

页面布局二

一.首先分析布局,可以把页面分成3个部分 (1)第一行  只有一个单元格,里面只有一张图片 (2)第二行  只有一个单元格 一个p标签里包含了4个超链接 (3)第三行 两个单元格 主要是第三行 第二列的表格比较复杂,我的思想就是一行一行看,设置rowspan,并把它一列其他被合并的删除掉 二.修饰 第一行 图片距离左边有距离 第二行 和页面布局一思想接近就直接贴代码了  主要是结构伪类选择器的应用 第三行通过PS测量得知表格是居中的,所以设置表格宽度和居中,然后设置每个td的宽度,和表格之间的距

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

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