文档章节

masonry闲谈

似水流年0_0
 似水流年0_0
发布于 2015/12/18 10:18
字数 540
阅读 86
收藏 1

玩过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

运行效果如下:

没点击之前:

点击之后:

© 著作权归作者所有

上一篇: PCH文件的作用
下一篇: c语言指针闲谈
似水流年0_0
粉丝 58
博文 84
码字总数 55871
作品 0
长宁
技术主管
私信 提问
jQuery布局插件--Masonry

Masonry是一 个用来布局的jQuery插件,看了下面这张对比图你就知道它的用途: 配置Masonry相当容易,只需要在jQuery脚本中的wrapping container元素中加上.masonry()方法。 multiple widths:...

匿名
2010/05/08
53.2K
6
分享一个jQuery动态网格布局插件:Masonry

日期:2011/12/01 来源:GBin1.com 在线演示 Masonry是 一款非常强大的jQuery动态网格布局插件,可以帮助开发人员快速开发类似剪贴画的界面效果。和CSS中float的效果不太一样的地方在 于,f...

gbin1
2011/12/08
252
0
Masonry的使用

Masonry 源码:https://github.com/Masonry/Masonry Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Ma...

zh_iOS
2016/06/14
197
0
TableViewCell的折展(Masonry)

说明:因为项目需要想先做一个cell展开折叠的Demo,看了网上很多cell展开折叠的方式都是用另外一个cell来替换,感觉完全没必要,忽然想到了Masonry(这确实是个好东西啊),所以花了点时间利...

_子墨
2016/04/08
119
0
IOS--Autolayout封装库Masonry介绍与使用实践

参考文档:http://adad184.com/2014/09/28/use-masonry-to-quick-solve-autolayout/ 介绍:Masonry是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局,简洁明了...

Mark_Jiang
2016/01/27
49
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
今天
4
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
今天
8
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
今天
4
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
6
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
6
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部