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 {
_ = $0?.top.left.equalTo()(self.containerView)?.with().offset()(0)
let size = NSValue(cgSize: CGSize(width:30, height:15))
_ = $0?.size.equalTo()(size)
}

 

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

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

  对于mas_equalTo则可以写成:

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

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

  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{@discardableResultfunc sEqualTo(_ attr : Any?) -> MASConstraint!{return self.equalTo()(attr)}@discardableResultfunc sEqualTo( point : CGPoint) -> MASConstraint!{let value = NSValue(cgPoint:point)return self.equalTo()(value)}@discardableResultfunc sEqualTo( size : CGSize) -> MASConstraint!{let value = NSValue(cgSize:size)return self.equalTo()(value)}@discardableResultfunc sEqualTo( inset : UIEdgeInsets) -> MASConstraint!{let value = NSValue(uiEdgeInsets:inset)return self.equalTo()(value)}@discardableResultfunc sOffset(_ offset : CGFloat) -> MASConstraint!{return self.offset()(offset)}@discardableResultfunc sInset(_ inset : UIEdgeInsets) -> MASConstraint!{return self.insets()(inset)}
}

  

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

转载于:https://www.cnblogs.com/tiantianbobo/p/7076590.html

Masonry 在swift下的使用相关推荐

  1. macOS swift下使用贝塞尔曲线制作五子棋盘(2)

    macOS swift下使用贝塞尔曲线制作五子棋盘(2) 落子 黑白子交替 计算落子的point 功能 判断当前落点是否有相同棋子,并保存 判断输赢 分析 左右分析 上下分析 斜向分析 悔棋 重开游戏 ...

  2. macOS swift下使用贝塞尔曲线制作五子棋盘(1)

    Mac OS下的五子棋盘 制作棋盘 画棋盘线 画横线 画竖线 画棋子 棋盘最终效果 END 制作棋盘 首先需要制作一个简单的500x500的棋盘窗口,这里使用xib来布局 下一步创建棋盘类,关联xib ...

  3. Swift如何使用Masonry和SnapKit

    SnapKit: https://github.com/SnapKit/SnapKit v.snp_makeConstraints { (make) in 由于swift和oc语法不一样 equalT ...

  4. swift 拖动按钮_Swift下使用UICollectionView 实现长按拖拽功能

    导读 简单用Swift写了一个collectionview的拖拽点击排序效果; 拖拽排序是新闻类的App可以说是必有的交互设计,如今日头条,网易新闻等. 效果 主要代码 手势长按移动 1.给Colle ...

  5. swift 选中长按项_Swift下使用UICollectionView 实现长按拖拽功能

    导读 简单用Swift写了一个collectionview的拖拽点击排序效果; 拖拽排序是新闻类的App可以说是必有的交互设计,如今日头条,网易新闻等. GitHub地址:https://github ...

  6. iOS下OpenCV开发用OC还是Swift

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 其实标题中这个问题并不准确,准确的说法应该是iOS下的OpenCV开发是使用OC还是Swift ...

  7. iOS开发之Masonry框架源码解析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...

  8. iOS开发之Masonry框架源码深度解析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...

  9. iOS开发之swift资料大全

    目录(?)[+] 版本:Swift github排名 https://github.com/trending,github搜索:https://github.com/search 主要工作说明:  1 ...

  10. swift 学习资料大全

    版本:Swift github排名 https://github.com/trending,github搜索:https://github.com/search 主要工作说明:  1. 将Swift从 ...

最新文章

  1. 6. matlab中case语句的使用
  2. 20个命令行工具监控 Linux 系统性能(转载)
  3. 认识JVM--第一篇-对象分配&回收算法
  4. php 子网掩码正则,验证子网掩码正则表达式代码范例
  5. 苹果笔记本电脑好用吗_苹果新品发布会消息汇总(8月25日)
  6. C和指针之学习笔记(3)
  7. Python: 组合管理与蒙特卡洛方法实现
  8. 小白 白嫖7天百度云网盘会员,高速下载
  9. 搭建内网文件共享服务器,如何搭建共享服务器实现办公室文件共享?
  10. SpringBoot-DDD领域驱动设计的概念
  11. 杜邦线改成焊线_做杜邦线(假)教程
  12. mbr引导的启动盘制作方法
  13. 论文查找ICCV ECCV CVPR
  14. hdu2859Phalanx
  15. 云服务器共享文件格式设置,云服务器文件共享设置
  16. 微服务项目之电商--15.后台分页查询及新增品牌业务添加
  17. 你需要知道的 TCP 三次握手
  18. 三星4k3d电视测试软件,说出来你可能不信:3D、4K、曲面电视慎重购买
  19. 安卓 root权限笔记
  20. springboot核酸检查预约系统毕业设计毕设作品开题报告开题答辩PPT

热门文章

  1. php - MySQL创建数据库和数据表
  2. DBCC--SQLPERF
  3. Spring3.0_调试错误集
  4. Rayzone2面大旗的官方汉译
  5. IntelliJ IDEA 2021 for Mac(最好的java开发工具)正式版支持m1芯片
  6. PhoneClean(iOS设备清理)下载安装,软件介绍
  7. Reflector 3在录制中如何添加自己的声音
  8. mac Desktop 在Terminal 无法访问,错误提示:ls: .: Operation not permitted
  9. Ayoa:让思维导图更简单,在线使用 无需安装客户端
  10. System.ConfigurationManager类用于对配置文件的读取