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. java-cef嵌入基于Chrome内核浏览器,做页面爬虫(可以尽在ajax异步请求数据)

    1 CentOS 7.0 上安装和配置 VNC 服务器 2.1 2.1.1 首先,我们需要一个可用的桌面环境(X-Window),如果没有的话要先安装一个. 注意:以下命令必须以 root 权限运行. ...

  2. [ios]quartz2d画板功功能实现核心代码

    //触摸开始 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //    1,获取对 ...

  3. Spring IOC的使用

    控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转,目的是为了获得更好的扩展性和良好的可维护性.所谓依 ...

  4. Gephi安装

    Gephi for mac https://gephi.org/users/download/ 在官网上下载gephi-0.9.1-macos.dmg双击拖到Application里面就好了,注意有的 ...

  5. nginx 日志分割(简单、全面)

    Nginx 日志分割 因业务需要做了简单的Nginx 日志分割, 第1章 详细配置如下. #建议在mkdir  /home/shell  -p 专门写shell 脚本位置 root@localhost ...

  6. Opencv在linux下安装

    Opencv in Linux These steps have been tested for Ubuntu 10.04 but should work with other distros as ...

  7. 面试(3)-java-se-java中的匿名内部类总结

    java中的匿名内部类总结 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1 ...

  8. python利用selenium和safari浏览器驱动实现新浪微博自动点赞 Demo

    import time from selenium import webdriver browser = webdriver.Safari() browser.get('http://weibo.co ...

  9. hadoop 2.7.3 集群安装

    三台虚拟机,centos6.5 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 :: loca ...

  10. 基于nodejs 的多页面爬虫

    前言 前端时间再回顾了一下node.js,于是顺势做了一个爬虫来加深自己对node的理解. 主要用的到是request,cheerio,async三个模块 request 用于请求地址和快速下载图片流 ...