ios 屏幕适配 autolayout | Masonry 使用

设置约束的方式: 1. 通过底部的面板  2. 拖按照ctrl键,选择一个控件拖向另外一个控件 3. 在左侧菜单控件列表,选择一个控件拖向另外一个控件  4. 在右侧约束面板,设置

1.  autolayout 属性设置: 

  autolyout 对齐方式
  autolayout 相对其他控件距离、宽高、相对于其他控件宽高, 如下图属性

设置对齐方式: 

A,B控件 上下左右对齐,还可中心点对齐,选择一个控件拖向另外一个控件

 设置距离、宽高属性

 。 

2.  案例1: 设置控件水平、垂直居中 

  设置 垂直 水平 对齐、  设置控件宽高 【 注意:确定控件x,y坐标,以及宽、高那么久不会报红约束 存在问题】

设置 水平 垂直 居中: 

设置宽高: 

最终效果显示: 

3.  案例2 : 设置 兄弟 View之间的 约束

A控件 设置左边、顶部、高度约束   B 控件·设置右侧、底部约束 、 设置A、B控件等高, 设置A控件 距离右侧B 控件 距离

设置A控件 左边、顶部、高度约束

B 控件设置 右侧、 底部 约束

设置  登高、等宽

设置A控件 距离右侧B 控件 距离,最终效果

3.   autlayout使用小技巧

 默认宽高:  ImageView[设置图片以后] 、Button [文本宽高]
   设置 上下左右 约束都是0 ,不行 图片会被 压缩

4. 案例4  设置兄弟View 之间约束

A控件 设置左右 约束、设置高度   B控件 设置 右对齐、上间距、 等宽、 

然后设置   下面View宽度= 上面View宽度的/2

5.  案例5: 设置 按钮控件覆盖图片 按钮, 设置透明按钮, 做点击事件

  1. 设置图片  垂直 、水平 居中 
 2.   设置宽度 图片宽度    414*736
 3.   拖入按钮控件 , 盖住图片按钮
 4.   设置 宽、高约束 图片控件
 5.     设置 水平、垂直  使用当前位置布局, 选择 Use Current Canvas Values

6. 设置控件平分:

 IOS 设置控件平分指导思想:ABCD 四个子控件 在 父控件View中
 1. 拖动父 View  设置 上下右约束0,高度 120 
 2. 首先拖动 4个 按钮 在父 View中,作为子View 

 3. 然后设置第一个按钮A  上下左右 为0
           第二个按钮B  上下右为0
           第三个按钮C  上下右为0 
           第四个按钮D  上下右为0


 然后选中 4个 按钮,设置等宽、等高即可

设置父控件高度包裹子控件:

1. 拖入父View, 设置左右下约束、高度(随便给)
2. 拖入三个控件设置平分A,B,C
3. 删除父View高度
4. 选择A控件,设置A控件底部等于父View底部

7.  Masonry 使用

Masonry 下载以后:启动Masonry , Masonry 就是库,拖入项目中 

启动Masonry IOS Example 

 拖入源文件的区别: 

1、Create groups : 拖入的资源文件中包含其他文件夹在项目中,但是在安装目录 bundle 下不会传文件夹 
   导入 包: #import "Masonry.h"  
2.  create folder refrences:  拖入的资源文件中包含其他文件夹在项目中, 在bundle目录下也会存在真实
文件夹     #import "masonry/Masonry.h"  
3.  不勾选 文件夹拖拽: 在项目中可以看到,但是打包以后不再安装包内 


 

 代码案例:



#import "ViewController.h"

// 解决 mas_
//define this constant if you want to use Masonry without the 'mas_' prefix
#define MAS_SHORTHAND

// 解决 对数据的自动装箱
//define this constant if you want to enable auto-boxing for default syntax
#define MAS_SHORTHAND_GLOBALS

#warning  宏定义一定要 放到 导入头文件之前 , 不然会影响编译

// 导入头文件
#import "Masonry.h"


@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
#warning Mansory 会自动的帮我们把autoresizing给关闭
    
    UIView *redView = [[UIView alloc] init];
    redView.backgroundColor = [UIColor redColor];
    
    [self.view addSubview:redView];
    
    /**
     第一种写法
     
     [redView mas_makeConstraints:^(MASConstraintMaker *make) {
     // make 在这里就代表被约束的view,表示距离顶部20
     // 顶部
     make.top.equalTo(self.view.mas_top).offset(20);
     // 设置左侧, 表示距离左侧20
     make.left.equalTo(self.view.mas_left).offset(20);
     // 设置右侧
     make.right.equalTo(self.view.mas_right).offset(-20);
     
     // 设置高度 , 这里使用的时候: 装箱
	  // 这里 参数是 id 类型, 自动把 int 转化为 id 类型
     make.height.mas_equalTo(40);
     
     }];
     */
    
    
    /**
     第二种写法
     如果被约束view 的属性 和 参照view的属性相同的话可以省略掉
     [redView mas_makeConstraints:^(MASConstraintMaker *make) {
     make.top.equalTo(self.view).offset(20);
     make.left.equalTo(self.view).offset(20);
     make.right.equalTo(self.view).offset(-20);
     make.height.mas_equalTo(40);
     }];
     */
    
    // 3. 如果想要省略掉 mas_ 导入  #define MAS_SHORTHAND
    
//    [redView makeConstraints:^(MASConstraintMaker *make) {
//        make.top.equalTo(self.view).offset(20);
//        make.left.equalTo(self.view).offset(20);
//        make.right.equalTo(self.view).offset(-20);
//        make.height.equalTo(40);
//    }];

    /**
     4.  如果, 被约束view两个属性 的值是相同的, 可以连写
     
     [redView mas_makeConstraints:^(MASConstraintMaker *make) {
     
     // 距离顶部和左边
     make.top.left.equalTo(self.view).offset(20);
     make.right.equalTo(self.view).offset(-20);
     make.height.mas_equalTo(40);
     
     }];
     */
    
    /**   5. 统一设置 
     [redView mas_makeConstraints:^(MASConstraintMaker *make) {
     make.edges.mas_equalTo(UIEdgeInsetsMake(20, 20, 20, 20));
     }];
     */
    
    //6.  默认的参照view 就是 自己的父view
    [redView makeConstraints:^(MASConstraintMaker *make) {
        
        make.top.left.offset(20);
        make.right.offset(-20);
        make.height.equalTo(40);
    }];
    
    // 7. 蓝色的view
    
    UIView *blueView = [[UIView alloc] init];
    blueView.backgroundColor = [UIColor blueColor];
    
    [self.view addSubview:blueView];
    
    [blueView makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(redView.bottom).offset(20);
        make.right.equalTo(redView).offset(0);
        make.height.equalTo(redView);
        make.width.equalTo(redView).multipliedBy(0.5);
        
        
    }];
    
    
    /**
	8. 
     更新约束 , 在原有的基础上 , 对要更新的约束进行修改
     如果使用 makeConstraints 就会造成约束冲突, 把原来的约束都清空掉,设置新的
     [redView updateConstraints:^(MASConstraintMaker *make) {
     make.height.equalTo(80);
     }];
    */
    
    /**
     重新设置约束
     把原有所有的约束都清空掉, 然后设置新的
     
     [redView remakeConstraints:^(MASConstraintMaker *make) {
     
     make.height.equalTo(50);
     }];
     */
    
    
    
}


@end

约束动画:



#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *redView;

// 选择 右侧属性 面板 , 拖入 top 约束即可
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topMargin;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    // 只是设置约束
    self.topMargin.constant += 20;
    
    [UIView animateWithDuration:0.5 animations:^{
        // 执行的动画必须是可动画的 alpha , frame ,bounds, hiden
        
        // self.view 调用这个方法, 会刷新他所有的子view的约束
        [self.view layoutIfNeeded];
    }];
}

@end

猜你喜欢

转载自blog.csdn.net/dreams_deng/article/details/106477604