01-自动布局 AutoResizing VFL Autolayout

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 = [[ UIView alloc ] init ];
    [
self . view addSubview :btn];
   
    btn.
backgroundColor = [ UIColor redColor ];
    [btn
setTranslatesAutoresizingMaskIntoConstraints : NO ];
   
   
   
NSLayoutConstraint *top = [ NSLayoutConstraint constraintWithItem :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 = [[ UIView alloc ] init ];
    MyView1. backgroundColor = [ UIColor orangeColor ];
    [self.viewaddSubview: MyView1];
    // 关闭Autoresizing
    [MyView1 setTranslatesAutoresizingMaskIntoConstraints : NO ];
   
   
UIView *MyView2 = [[ UIView alloc ] init ];
    MyView2.
backgroundColor = [ UIColor blueColor ];
    [self.viewaddSubview: MyView2];
    // 关闭Autoresizing
    [MyView2 setTranslatesAutoresizingMaskIntoConstraints : NO ];
   
    UIButton *btn = [ UIButton buttonWithType : UIButtonTypeCustom ];
    [
self . view addSubview :btn];
    [btn setBackgroundColor:[UIColor redColor]];
    // 关闭Autoresizing
    [btn setTranslatesAutoresizingMaskIntoConstraints : NO ];
    [btn
setTitle : @" 上一页 " forState : UIControlStateNormal ];
    [btn
addTarget : self action : @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 = [ NSMutableArray arrayWithArray :arr1];
    [arrM
addObjectsFromArray :arr2];
    [arrM
addObjectsFromArray :arr3];
    [arrM
addObjectsFromArray :arr4];
   
     //将约束添加到self.view  
    [ self . view addConstraints :arrM];


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值