zoukankan      html  css  js  c++  java
  • iOS之自动布局

    iOS的自动布局技术一直都是前端开发所必不可少的,它能使我们开发出来的项目更加规范美观,同时也更加灵活 ,接下来笔者就介绍一下自动布局常用的几种方式,供大家参考~~

    方法一:storyboard

    从一开始做iOS开发,只考虑适配4s,直接把坐标,长宽都写成固定值。

    之后考虑适配5s,在界面上设定好一个组件的坐标,其他的控件的位置做一下相对计算就可以。一直没考虑自动适配,用storyboard觉得不灵活,不能复用,而且还死卡。

    之后出了iPhone大屏手机,不得不重新考虑下适配问题了。用storyboard的autolayout拖了一个半成品,(主要卡在scrollview的约束上)虽然花了时间弄好了。

    很多大神不愿意用storyboard,有的原因是不习惯,有的是怕和代码时候出现冲突。但在storyboard拖控件,加约束,着实方便快速。这里不多说了,今天主要着重讲后两种方法。

    方法二:Masonry

    Masonry,一款用代码写自动布局的三方,好用的飞起来~

    Masonry约束控件的写法真的很多很随意,记录一下。

    //创建一个视图
    
    UIView * testView = [[UIView alloc] init];
    testView.backgroundColor = [UIColor grayColor];
    [self.view addSubview:testView];
    
        
    //将testView布满self.view,能完成这个功能的代码实在太多,下面只记录了5种,举一反三,灵活使用吧。
    
    //1.
    
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.edges.equalTo(self.view);
    }];
    
        
    //2.
    
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.top.and.bottom.left.right.equalTo(self.view);
    }];
    
        
    //3.
    
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.top.equalTo(self.view);
       make.bottom.equalTo(self.view);
       make.left.equalTo(self.view);
       make.right.equalTo(self.view);
    }];
    
        
    //4.
    
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.top.equalTo(self.view.mas_top);
       make.bottom.equalTo(self.view.mas_bottom);
       make.left.equalTo(self.view.mas_left);
       make.right.equalTo(self.view.mas_bottom);
    }];
    
        
    //5.
    
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.top.and.left.and.right.bottom.equalTo(@0);
    }];
    
    
    //加边距
    
    //1.
    
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.edges.equalTo(self.view).with.insets(UIEdgeInsetsMake(10, 10, 10, 10));
    }];
        
    
    //2.
    
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.top.equalTo(self.view).with.offset(10);
       make.left.equalTo(self.view).with.offset(10);
       make.bottom.equalTo(self.view).with.offset(-10);
       
       //注意:这么写也可以
       make.right.equalTo(self.view).with.insets(UIEdgeInsetsMake(10, 10, 10, 10));
    }];
    
    
    //3.
    
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.top.equalTo(@10);
       make.left.equalTo(@10);
       make.bottom.equalTo(@-10);
       make.right.equalTo(@-10);
    }];
     
    
    //使用LayoutGuide,是从状态栏以下开始布局,如果加上导航条,就会以导航条以下开始布局。  
    
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
        UIView *topLayoutGuide = (id)self.topLayoutGuide;
        make.top.equalTo(topLayoutGuide.mas_bottom);
        UIView *bottomLayoutGuide = (id)self.bottomLayoutGuide;
        make.bottom.equalTo(bottomLayoutGuide.mas_top);
        make.left.equalTo(self.view);
        make.right.equalTo(self.view);
         
    }];   
        
    //可以设置center,size。
    
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.center.mas_equalTo(CGPointMake(0, 50));
       make.size.mas_equalTo(CGSizeMake(200, 100));
    }];
        
    //写一个scrollView横滑约束,竖向滑动可直接参考Masonry的官方栗子。
    
    UIView * superview = self.view;
         
    //约束scrollView相对于父视图的约束
         
    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.edges.equalTo(superview);
    }];
        
    //创建 contentView
    UIView * contentView = [[UIView alloc] init];
    contentView.backgroundColor = [UIColor redColor];
    [self.scrollView addSubview:contentView];
        
    //约束 contentView
    [contentView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.edges.equalTo(self.scrollView);
       make.height.equalTo(self.scrollView);
    }];
        
    [contentView addSubview:self.hotBookView];
    [contentView addSubview:self.myBookView];
        
    [self.hotBookView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.top.equalTo(@0);
       make.left.equalTo(@0);
       make.width.equalTo(self.scrollView.mas_width);
       make.height.equalTo(self.scrollView.mas_height);
    }];
        
    [self.myBookView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.left.equalTo(self.hotBookView.mas_right);
       make.top.equalTo(@0);
       make.width.equalTo(self.scrollView.mas_width);
       make.height.equalTo(self.scrollView.mas_height);
    }];
        
    [contentView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.right.equalTo(self.myBookView.mas_right);
    }];
        
    //将view组成数组,也可以约束.
    
    self.buttonViews = @[ raiseButton, lowerButton, centerButton ];
    [self.buttonViews updateConstraints:^(MASConstraintMaker *make) {
        make.baseline.equalTo(self.mas_centerY).with.offset(self.offset);
    }];
        
    //将testView,greenView,blueView的高度设成一致
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
       make.height.equalTo(@[greenView, blueView]);
    }];

    方法三:xib

    xib,把每个页面分开。每个程序员做自己的模块,很好的解决冲突问题。很多公司都用这种方法开发项目,大家分工明确,而且可以拖拽控件,从而使我们的效率大大的增加。接下来是步骤~~

    1.首先建立xib文件,其实很简单,就是在你建立Cocoa Touch Class的时候勾选一下 Also create XIB file的选项,很好找。

    2.我们可以看到xib文件已经建好了,点击进入

    3.而这个也就相当于一个小的故事版,拖进去我们想要的控件,大致摆好位置。

    4.这个是在左下角的Pin按钮,用来适配控件距离当前View的上下左右的距离,和本身的宽高。

    5.这是Align按钮,用来适配控件的对齐和居中

    6.都设置好之后,点击最左边的按钮选择Selected View下的 Update Frames进行刷新,然后就大功告成了!

    后记:

    对于iOS的自动布局,选择代码还是拖拽约束,团队合作就看公司要求,自己写项目看心情就可以了。并没有什么绝对的好与坏~~

  • 相关阅读:
    某地理位置模拟APP从壳流程分析到破解
    GDB多线程调试分析
    ARM平台指令虚拟化初探
    爱加密企业版静态脱壳机编写
    APK加固之静态脱壳机编写入门
    APK加固之类抽取分析与修复
    Xposed截获 Android手机QQ密码
    菜鸟 学注册机编写之 Android app
    Pstools使用
    msf端口扫描
  • 原文地址:https://www.cnblogs.com/LeoTai/p/5471710.html
Copyright © 2011-2022 走看看