Masonry在oc下使用很方便,但是在swift下,由于oc方法和property都可以使用.fuc的语法,swift下只有属性可以使用.property的语法,方法只能写成.func().因此在swift下如果直接写就只能写成

        downTriangle.mas_makeConstraints { (make: MASConstraintMaker? ) in
_ = make?.left.equalTo()(self)
_ = make?.bottom.equalTo()(self)
}
skillTypeText.mas_makeConstraints {
_ = $?.top.left.equalTo()(self.containerView)?.with().offset()()
let size = NSValue(cgSize: CGSize(width:, height:))
_ = $?.size.equalTo()(size)
}

 

 这种写法非常麻烦,也不自然。如果直接使用snapkit又需要引入新的库,所以楼主就对masonry做了些改动。改动后的写法:

        downTriangle.mas_makeConstraints {
$.left.sEqualTo(self)
$.bottom.sEqualTo(self)
}

  对于mas_equalTo则可以写成:

        skillTypeText.mas_makeConstraints {
$.top.left.sEqualTo(self.containerView).with().sOffset()
// let size = NSValue(cgSize: CGSize(width:30, height:15))
$.size.sEqualTo(size: CGSize(width:, height:))
}

  主要改动了以下几个地方:

  1.mas_makeConstraints 及类似方法添加__nonnull的声明

  - (NSArray *)mas_makeConstraints:( void(^ _Nonnull )(MASConstraintMaker* __nonnull make))block;

  2.Masconstraint添加属性声明,本来是想写个category添加个声明,但是失败了,好像只能写在原文件上。

@property (nonatomic, strong, readonly) MASConstraint *left;
@property (nonatomic, strong, readonly) MASConstraint *top;
@property (nonatomic, strong, readonly) MASConstraint *right;
@property (nonatomic, strong, readonly) MASConstraint *bottom;
@property (nonatomic, strong, readonly) MASConstraint *leading;
@property (nonatomic, strong, readonly) MASConstraint *trailing;
@property (nonatomic, strong, readonly) MASConstraint *width;
@property (nonatomic, strong, readonly) MASConstraint *height;
@property (nonatomic, strong, readonly) MASConstraint *centerX;
@property (nonatomic, strong, readonly) MASConstraint *centerY;
@property (nonatomic, strong, readonly) MASConstraint *baseline;

  3.swift下添加sEqualTo,sInset等方法

extension MASConstraint{
@discardableResult
func sEqualTo(_ attr : Any?) -> MASConstraint!{
return self.equalTo()(attr)
}
@discardableResult
func sEqualTo( point : CGPoint) -> MASConstraint!{
let value = NSValue(cgPoint:point)
return self.equalTo()(value)
}
@discardableResult
func sEqualTo( size : CGSize) -> MASConstraint!{
let value = NSValue(cgSize:size)
return self.equalTo()(value)
}
@discardableResult
func sEqualTo( inset : UIEdgeInsets) -> MASConstraint!{
let value = NSValue(uiEdgeInsets:inset)
return self.equalTo()(value)
}
@discardableResult
func sOffset(_ offset : CGFloat) -> MASConstraint!{
return self.offset()(offset)
}
@discardableResult
func sInset(_ inset : UIEdgeInsets) -> MASConstraint!{
return self.insets()(inset)
}
}

  

  masonry使用的各类方法有很多,楼主的项目也很赶,一般也是遇到一个写一个。大致改法都类似。像nsarray+masaddition基本没用,也没必要去添加。


Masonry 在swift下的使用的更多相关文章

  1. iOS 11 导航栏 item 偏移问题 和 Swift 下 UIButton 设置 title、image 显示问题

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  2. Swift下自定义xib添加到Storyboard

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51657154 ...

  3. swift -- 如何在swift下,使用类似oc的pch文件功能

    以前在做oc下的项目的时候,pch文件是必创建的,因为实在是太方便了,只要在build setting里面把pch的路径换成绝对路径,那么剩下的,想干什么就在里面干什么,但是swift下,可以实现这种 ...

  4. Objective-C与Swift下的自定义打印函数(Debug和Release)

    1.Objective-C 在使用Objective-C进行开发的过程中,为了Debug会不断的设置打印函数.如下图是我们经常用的,用来测试监听方法的实现与否: NSLog(@"%s&quo ...

  5. Swift下多个Storyboard的项目结构

    我是个比较喜欢用storyboard和xib的人.我个人的习惯就是,能用storyboard的一定不用代码手工撸.当然自己业余个人写的项目,基本上一个storyboard就搞定了.但涉及到多人合作下时 ...

  6. ios开发之--swift下Alamofire的使用

    1,首先使用cocoapods导入,如果有不会的同学,可以去看我写的关于cocopods使用的那篇博客 2,直接上代码: a 先看下文件结构 CommonFile.swift import UIKit ...

  7. Swift下表和方法

    本文将同时阐述Swift的方法和下标,因为根据我的理解,从某种程度上讲,下标的本质也是方法. 方法 众所周知,在支持面向对象的语言里,方法一般分为两种:实例方法和类方法(在有的语言中,「类方法」被称为 ...

  8. Swift下使用Xib设计界面

    虽然Swift可以纯代码设计界面,不过不利用现有的可视化工具有时候有点效率低.下面是使用xib设计方法,部分代码来自网上. (1)新建View 2.新建View class 3.DemoView.sw ...

  9. 第12月第26天 swift 下划线

    1. The _ is used to define that the parameter is not named If you have multiple _ it states that you ...

随机推荐

  1. 【复制粘贴】silverlight网格选择日期和时间

    今天有个功能需要在网格中输入时间,本来是用文本框的,但是客户说不知道格式,要求用选择的形式,好像silverlight又没有能选择时间的控件,谷歌下得到一个曲线救国的答案,记录下 <sdk:Da ...

  2. Scrapy 爬虫框架入门案例详解

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:崔庆才 Scrapy入门 本篇会通过介绍一个简单的项目,走一遍Scrapy抓取流程,通过这个过程,可以对 ...

  3. PXC5.7集群部署

    PXC三节点安装: node1:10.157.26.132 node2:10.157.26.133 node3:10.157.26.134   配置服务器ssh登录无密码验证 ssh-keygen实现 ...

  4. Python变量运算字符串等

    一,作用域 操作 name = 'liuyueming' if 1==1:... print name... liuyueming 两次回车执行 修改代码 >>> if 1==1:. ...

  5. Redis开启远程登录连接。

    今天使用jedis客户端api连接远程连接redis的时候,一直报错,如下: redis.clients.jedis.exceptions.JedisConnectionException: java ...

  6. sql查询优化整理

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  7. String的Intern方法详解

    引言 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String.这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念.常量池就类似一个JAVA系统级别提供的缓存.8种 ...

  8. 头皮发麻的HTML课时一

    话说我都不知道有多少天没有更新我的随笔了,不过我忽的一下发现到灵魂深处的罪孽:好吧,不扯淡了,其实就是自己懒得外加上HTML这个东西又实在是很重要,所以良心发现把我自己所学的给记录下来,我会尽量的写的 ...

  9. MyBatis之简单了解Plugin

    MyBatis的Configuration配置中有一个Plugin配置,根据其名可以解释为"插件",这个插件实质可以理解为"拦截器"."拦截器&quo ...

  10. 如何升级php版本---从php5.5.12 升级php7.1.5 wamp实践

    1.从官网下载一个php7.1.5 2.将刚下载的压缩包解压缩,修改命名为php7.1.5,即php+版本号. 3.将这个文件夹放在wamp/bin/php 目录下. 4.将原来版本的php5.5.1 ...