masonry闲谈

玩过android的都知道,android开发UI时是多么的人性化,像一些线性布局,相对布局,帧布局等等,而且还有友好的可视化界面,尤其是在android studio这个IDE中表现的更为突出。

那么对于iOS开发人员来说比较苦恼的就是计算控件的位置,虽然现在可以用Auto Layout,但总感觉这玩意不怎么好用,要确定一个控件的大小和位置要写辣么多的代码,这是不爽。当然你也可以用xib活着storyboard,现在苹果也鼓励使用storyboard,但它有很大的局限性,灵活性不足,我们可以用它来确定大的方向,或者一些简单的布局。接下来为大家推荐一个好用的写ib的库,叫做masonry.大家可以从这个地址下载。https://github.com/SnapKit/Masonry

下面是我写的一个小例子:

//
//  ViewController.m
//  MasonryDemo
//
//  Created by gefufeng on 15/12/16.
//  Copyright © 2015年 gefufeng. All rights reserved.
//

#import "ViewController.h"
#import "Masonry.h"

@interface ViewController ()
@property(nonatomic,strong)UIImageView* avatar;
@property(nonatomic,strong)UILabel* name;
@property(nonatomic,strong)UILabel* publishTime;
@property(nonatomic,strong)UILabel* content;
@property(nonatomic,strong)UIButton* button;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self initView];
}
-(void)clickme:(UIButton*) send{
    NSString* str = @"Masonry adds a category to NSLayoutConstraint which overrides the default implementation of - (NSString *)description";
    self.content.text = str;
    //设置一个行高上限
    CGSize size = CGSizeMake(self.content.bounds.size.width,self.view.bounds.size.height);
    //计算实际frame大小,并将label的frame变成实际大小
    CGSize labelsize = [self.content.text sizeWithFont:self.content.font constrainedToSize:size lineBreakMode:self.content.lineBreakMode];
    [self.content mas_updateConstraints:^(MASConstraintMaker *make) {
        make.height.mas_equalTo(labelsize.height);
    }];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

}
-(void)initView{
    self.title = @"eeee";
    
    self.avatar = [[UIImageView alloc] init];
    self.avatar.backgroundColor = [UIColor redColor];
    
    self.name = [[UILabel alloc] init];
    self.name.backgroundColor = [UIColor greenColor];
    
    self.publishTime = [[UILabel alloc] init];
    self.publishTime.backgroundColor = [UIColor blueColor];
    
    self.content = [[UILabel alloc] init];
    self.content.backgroundColor = [UIColor grayColor];
    [self.content setNumberOfLines:0];
    self.content.lineBreakMode = NSLineBreakByWordWrapping;
    self.content.textAlignment = NSTextAlignmentLeft;
    self.content.font = [UIFont systemFontOfSize:15];
    
    self.button = [UIButton buttonWithType:UIButtonTypeCustom];
    self.button.backgroundColor = [UIColor redColor];
    [self.button setTitle:@"点我适配" forState:UIControlStateNormal];
    [self.button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [self.button addTarget:self action:@selector(clickme:) forControlEvents:UIControlEventTouchUpInside];
    
    [self.view addSubview:self.avatar];
    [self.view addSubview:self.name];
    [self.view addSubview:self.publishTime];
    [self.view addSubview:self.content];
    [self.view addSubview:self.button];
    
    [self.avatar mas_makeConstraints:^(MASConstraintMaker *make) {
        make.size.mas_equalTo(CGSizeMake(60, 60));
        make.top.equalTo(self.view).offset(75);
        make.left.equalTo(self.view).offset(10);
    }];
    [self.name mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.avatar);
        make.left.equalTo(self.avatar.mas_right).offset(10);
        make.height.mas_equalTo(30);
        make.width.mas_equalTo(100);
    }];
    [self.publishTime mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.avatar.mas_right).offset(10);
        make.top.equalTo(self.name.mas_bottom);
        make.height.mas_equalTo(30);
        make.width.mas_equalTo(100);
    }];
    [self.content mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.avatar.mas_left);
        make.top.equalTo(self.avatar.mas_bottom);
        make.height.mas_equalTo(30);
        make.right.equalTo(self.view).offset(-10);
    }];
    [self.button mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.view);
        make.width.mas_equalTo(80);
        make.height.mas_equalTo(40);
    }];
    
}


@end

运行效果如下:

没点击之前:

masonry闲谈

点击之后:

masonry闲谈

你可能感兴趣的:(ios,OS,masonry)