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文件,你就会看到下面图的界面):


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];


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

自动布局Autoresizing autolayout VFL

屏幕适配发展历程:代码计算 frame->autoresizing(父子控件之间的关系)->autolayout(任何控件都能产生关系)-> sizeclass(对屏幕适配进行分类,真正布局还是 au...
  • u011472643
  • u011472643
  • 2015年10月08日 01:22
  • 226

IOS的AutoresizingMask和AutoLayout

http://www.juwends.com/tech/apple/ios-autoresizingmask-autolayout.html 初涉IOS开发,还没完全踏入,借了本名叫...
  • cyc_yyl3111212
  • cyc_yyl3111212
  • 2015年02月27日 16:14
  • 1429

IOS Autolayout(VFL) 处理子视图居中

VFL的子视图居中,网上搜了很多都没找到有用代码,自己研究出来了。代码如下 UIActivityIndicatorView* prgrssView = [[UIActivityIndicat...
  • chujiujiao
  • chujiujiao
  • 2013年10月25日 15:17
  • 26290

重写UIButton,用于autoLayout自动布局.图在上,文字在下

模仿百思不得解,先用xib写了,只要在layoutSubViews中写一下imageView,titleLabel的位置即可。 全部代码:https://github.com/kangqingyu/...
  • kangqingyu
  • kangqingyu
  • 2016年08月03日 17:31
  • 593

IOS开发-自动布局Autoresizing和Autolayout

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

iOS autoresizingMask与autoLayout

autoresizingMask是子视图的左、右、上、下边距以及宽度和高度相对于父视图按比例变化,例如: UIViewAutoresizingNone 不自动调整。 UIViewAutoresizi...
  • lvjiacumt
  • lvjiacumt
  • 2014年01月09日 18:48
  • 1978

IOS autolayout自动布局实例(swift)

第四篇 对于一个新手来说,刚接触自动布局这东西,会被一种叫约束的东西搞得晕头转向,不是少添加了,就是多添加了,造成约束冲突,不过弄明白之后,也就那回事了。 首先先上个最终的效果图上来,一步步做出这...
  • shenshucong520
  • shenshucong520
  • 2015年08月18日 17:35
  • 855

代码加约束VFL语法的详细使用介绍(代替Autolayout进行布局,比Autolayout更简单明了,生动直观)

Autoresizing已经满足不了我们加约束的需求,而Autolayout功能强大,应用比较普遍,但有时候需要用代码来加约束,这时候用Autolayout就比较麻烦了,代码繁琐不说,代码量也是大大滴...
  • zlj_jeck
  • zlj_jeck
  • 2016年05月20日 10:43
  • 1109

自动布局神器 -- ZXPAutoLayout框架的使用

简述地址:http://www.jianshu.com/p/0ed897e93909什么是ZXPAutoLayout ? iOS原生的自动布局(NSLayoutConstraint)非常繁琐, 影响...
  • biggercoffee
  • biggercoffee
  • 2015年12月08日 13:52
  • 4565

iOS10后,部分自动布局(AutoLayout)布局出错的解决方法

问题的根源在于代码中用到了layoutIfNeeded这个方法, 从官方的Release Notes中,看出iOS10应该是更改了layoutIfNeeded的时机(说是修改了以前的release版...
  • p7767158
  • p7767158
  • 2016年10月10日 17:11
  • 1413
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:01-自动布局 AutoResizing VFL Autolayout
举报原因:
原因补充:

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