01-自动布局 AutoResizing VFL Autolayout

原创 2015年07月08日 18:47:34
1.AutoResizing


UIViewAutoresizing是一个枚举类型,默认是UIViewAutoresizingNone,也就是不做任何处理。

1
2
3
4
5
6
7
8
9
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
    UIViewAutoresizingFlexibleWidth        = 1 << 1,
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
    UIViewAutoresizingFlexibleHeight       = 1 << 4,
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};

各属性解释:

UIViewAutoresizingNone

不会随父视图的改变而改变

UIViewAutoresizingFlexibleLeftMargin

自动调整view与父视图左边距,以保证右边距不变

UIViewAutoresizingFlexibleWidth

自动调整view的宽度,保证左边距和右边距不变

UIViewAutoresizingFlexibleRightMargin

自动调整view与父视图右边距,以保证左边距不变

UIViewAutoresizingFlexibleTopMargin

自动调整view与父视图上边距,以保证下边距不变

UIViewAutoresizingFlexibleHeight

自动调整view的高度,以保证上边距和下边距不变

UIViewAutoresizingFlexibleBottomMargin

自动调整view与父视图的下边距,以保证上边距不变










     使用Storyboard/Xib和代码设置autoresizing,它们是相反的。

     autoresizing组合使用: 

也就是枚举中的值可以使用|隔开,同时拥有多个值的功能,可以针对不同的场景作不同的变化。例如:

1
UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin
意思是:view的宽度按照父视图的宽度比例进行缩放,距离父视图顶部距离不变。

注意:

1)view的autoresizesSubviews属性为yes时(默认为yes),autoresizing才会生效。

2)从XCODE6开始,Storyboard&Xib默认是自动布局,因此我们需要手动调整,才能使用autoresizing。

具体操作如图(打开Storyboard文件,你就会看到下面图的界面):

160933283906601.png

AutoResizing缺陷:
一个父视图上有多个子视图时,需要给子视图添加某种关系的时候 如 等间隙 等宽 等高  这些不能实现

 /**代码设置Autoresizing*/
   
self.MyView.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleWidth;




2.AutoLayout

黄色警告:添加的约束和实际显示不一样
红色警告:约束加少了或者约束冲突了

代码添加约束1:(了解即可)

  UIView *btn = [[UIViewalloc]init];
    [
self.viewaddSubview:btn];
   
    btn.
backgroundColor= [UIColorredColor];
    [btn
setTranslatesAutoresizingMaskIntoConstraints:NO];
   
   
   
NSLayoutConstraint*top = [NSLayoutConstraintconstraintWithItem:btn
                                                          
attribute:NSLayoutAttributeTop
                                                          
relatedBy:NSLayoutRelationEqual
                                                             
toItem:self.view
                                                          
attribute:NSLayoutAttributeTop
                                                         
multiplier:1
                                                           constant:50];





3.VFL


 //VFL语法总结:
    //1“H”表示水平方向,“V”表示垂直方向
   
//2“|”表示父视图的边界
   
//3“[]”表示这是一个视图UIView的子类,可以组合多个条件,条件用"()",多个条件用逗号隔开[view(>=100,<200)]
    //4“@”表示优先级

功能        表达式

水平方向          H:

垂直方向          V:

Views         [view]

SuperView      |

关系         >=,==,<=

空间,间隙       -

优先级        @value




    UIView *MyView1 = [[UIViewalloc]init];
    MyView1.backgroundColor= [UIColororangeColor];
    [self.viewaddSubview: MyView1];
    //关闭Autoresizing
    [MyView1 setTranslatesAutoresizingMaskIntoConstraints:NO];
   
   
UIView *MyView2 = [[UIViewalloc]init];
    MyView2.
backgroundColor= [UIColorblueColor];
    [self.viewaddSubview: MyView2];
    //关闭Autoresizing
    [MyView2 setTranslatesAutoresizingMaskIntoConstraints:NO];
   
    UIButton *btn = [UIButtonbuttonWithType:UIButtonTypeCustom];
    [
self.viewaddSubview:btn];
    [btn setBackgroundColor:[UIColor redColor]];
    //关闭Autoresizing
    [btn setTranslatesAutoresizingMaskIntoConstraints:NO];
    [btn
setTitle:@"上一页"forState:UIControlStateNormal];
    [btn
addTarget:selfaction:@selector(btnAction)forControlEvents:UIControlEventTouchUpInside];
   
    
       //添加横向的约束
    NSArray *arr1 = [NSLayoutConstraint
                    
constraintsWithVisualFormat:@"H:|-20-[MyView1]-20-[MyView2(==MyView1)]-20-|"
                    
options:0
                    
metrics:nil
                      
views:NSDictionaryOfVariableBindings(MyView1, MyView2)];
   
   
NSArray *arr2 = [NSLayoutConstraint
                    
constraintsWithVisualFormat:@"H:|-20-[btn]-20-|"
                    
options:0
                    
metrics:nil
                    
views:NSDictionaryOfVariableBindings(btn)];

   //添加垂直约束
    NSArray *arr3 = [NSLayoutConstraint
                    
constraintsWithVisualFormat:@"V:|-40-[MyView1]-20-[btn(==MyView1)]-20-|"
                    
options:0
                    
metrics:nil
                    
views:NSDictionaryOfVariableBindings(btn, MyView1)];
   
   
NSArray *arr4 = [NSLayoutConstraint
                    
constraintsWithVisualFormat:@"V:|-40-[MyView2]-20-[btn(==MyView1)]-20-|"
                    
options:0
                    
metrics:nil
                    
views:NSDictionaryOfVariableBindings(MyView2, btn, MyView1)];

   //创建可变数组将两个约束加入数组
    NSMutableArray *arrM = [NSMutableArrayarrayWithArray:arr1];
    [arrM
addObjectsFromArray:arr2];
    [arrM
addObjectsFromArray:arr3];
    [arrM
addObjectsFromArray:arr4];
   
    //将约束添加到self.view 
    [self.viewaddConstraints:arrM];


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

IOS开发-自动布局Autoresizing和Autolayout

苹果的自动布局有两种: (1)Autoresizing (2)Autolayout 下面先介绍Autoresizing: 在开始使用前,我们要对xcode进行设置,因为默认xcode是打开Au...

iOS--VFL--autolayout--自动布局

使用Auto Layout中的VFL(Visual format language)--代码实现自动布局 本文将通过简单的UI来说明如何用VFL来实现自动布局。在自动布局的时候避免不了使用代码来加以...
  • kiwirr
  • kiwirr
  • 2016年06月17日 15:54
  • 238

OC-Layout自动布局-AutoResizing&AutoLayout&

1.布局 Layout什么是布局 是指在一个视图中,如何摆放它的子视图 (设置子视图的位置和大小) 如何布局?方法一: 纯代码布局 (古老的方法) 理念:当屏幕发生变化时,自动执行一段代码,在代码...

iOS的屏幕适配之Autoresizing、Autolayout、VFL、Masonry

屏幕适配 iPhone4S之前没有屏幕适配,因为屏幕尺寸不变,全部用frame、bounds、center进行布局。 iphone5之后才开始有屏幕适配。 Autoresizing...

自动布局:AutoLayout代码实现:NSLayoutConstraint、VFL、Mansony

一、注意事项 1、使用AutoLayout自动布局,全程都不要出现和frame相关的代码了。 2、设置 AutoLayout 约束,之前先禁用AutoResizing ,在代码里只需要针对某一个视图决...

IOS autoLayout之使用VFL语言进行代码自动布局

VFL的简单语法: H:[cancelButton(72)]-12-[acceptButton(50)] canelButton宽72,acceptButton宽50,它们之间间距12 H:[wide...

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

http://my.oschina.net/u/2340880/blog/524089 目录[-] iOS界面布局之三——纯代码的autoLayout及布局动画 一、引言 二、了解一个类 ...
  • jeffasd
  • jeffasd
  • 2015年12月29日 18:05
  • 593

IOS自动布局之Autoresizing

对于IOS的app开发者来说,不会像Android开发者一样为很多的屏幕尺寸来做界面适配,因此硬编码的坐标也能工作良好,但是从设计模式上来说这不是好的做法。而且也还有一些问题,如iPhone5的适配,...
  • ruglcc
  • ruglcc
  • 2015年12月04日 08:53
  • 549

iOS自动布局-Autoresizing

iOS下自动布局有两种技术可用:Autoresizing和Auto Layout。该文先说下Autoresizing,接下来再写一篇文章分析Auto Layout。 Autoresizing是子视图相...

iOS自动布局之Autoresizing

https://blog.cnbluebox.com/blog/2014/09/09/appkai-fa-zhe-xu-yao-wei-iphone6zuo-chu-gai-bian/ ...
  • jeffasd
  • jeffasd
  • 2016年04月11日 22:38
  • 206
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:01-自动布局 AutoResizing VFL Autolayout
举报原因:
原因补充:

(最多只允许输入30个字)