关闭

01-自动布局 AutoResizing VFL Autolayout

标签: IOS开发UI高级布局控件
348人阅读 评论(0) 收藏 举报
分类:
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];


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:115610次
    • 积分:3649
    • 等级:
    • 排名:第9222名
    • 原创:218篇
    • 转载:65篇
    • 译文:0篇
    • 评论:5条
    最新评论