第三方布局框架Neon初探
github地址:https://github.com/mamaral/Neon
居中
设置 view 在 superview 的中心,调用 anchorInCenter()并设置view大小,相当于frame center
view1.anchorInCenter(width: 300, height: 300)
imgV.anchorInCenter(width: 150, height: 150)
# 填充
如果想 view 填充superview,设置距离superview的边框距离, 调用 fillSuperview()
```
imgV.fillSuperview()
imgV.fillSuperview(left: 20, right: 5, top: 30, bottom: 5)
```

# 角对齐
view 相对于 superview 固定于某个角,调用anchorInCorner(),并传入要对齐哪个角的参数
```
view1.anchorInCorner(.topLeft, xPad: 20, yPad: 100, width: 100, height: 100)
view2.anchorInCorner(.topRight, xPad: 20, yPad: 50, width: 100, height: 100)
view3.anchorInCorner(.bottomLeft, xPad: 20, yPad: 20, width: 100, height: 100)
view4.anchorInCorner(.bottomRight, xPad: 20, yPad: 30, width: 100, height: 100)
```

# 边对齐
如果想让 view 相对于 superview 的某一边依靠对齐,调用anchorToEdge,自动居中对齐
```
view1.anchorToEdge(.top, padding: 300, width: 100, height: 100)
view2.anchorToEdge(.left, padding: 0, width: 100, height: 100)
view3.anchorToEdge(.bottom, padding: 88, width: 100, height: 100)
view4.anchorToEdge(.right, padding: 0, width: 100, height: 100)
```

# 边填充
如果想让 view 相对于 superview 的某一边居中对齐并自动填拉伸充,调用anchorAndFillEdge()
```
view1.anchorAndFillEdge(.top, xPad: size + 5, yPad: 88, otherSize: size)
view2.anchorAndFillEdge(.bottom, xPad: size + 5, yPad: 83, otherSize: size)
view3.anchorAndFillEdge(.left, xPad: 0, yPad: 0, otherSize: size)
view4.anchorAndFillEdge(.right, xPad: 0, yPad: 0, otherSize: size)
```

# 相对对齐
##### 距离相对view右边 居 上-中-下
```
view1.anchorInCenter(width: 200, height: 200)
view2.align(.toTheRightMatchingTop, relativeTo: view1, padding: 5, width: 50, height: 50)
view3.align(.toTheRightMatchingBottom, relativeTo: view1, padding: 5, width: 50, height: 50)
view4.align(.toTheRightCentered, relativeTo: view1, padding: 5, width: 50, height: 50)
```

##### 距离相对view左边 居 上 中 下
```
view2.align(.toTheLeftMatchingTop, relativeTo: view1, padding: 5, width: 50, height: 50)
view3.align(.toTheLeftMatchingBottom, relativeTo: view1, padding: 5, width: 50, height: 50)
view4.align(.toTheLeftCentered, relativeTo: view1, padding: 5, width: 50, height: 50)
```

##### 距离相对view下边 居 上 中 下
```
view2.align(.underMatchingLeft, relativeTo: view1, padding: 5, width: 50, height: 50)
view3.align(.underMatchingRight, relativeTo: view1, padding: 5, width: 50, height: 50)
view4.align(.underCentered, relativeTo: view1, padding: 5, width: 50, height: 50)
```
##### 距离相对view上边 居 上 中 下
```
view2.align(.aboveMatchingLeft, relativeTo: view1, padding: 5, width: 50, height: 50)
view3.align(.aboveMatchingRight, relativeTo: view1, padding: 5, width: 50, height: 50)
view4.align(.aboveCentered, relativeTo: view1, padding: 5, width: 50, height: 50)
```
# 对齐并填充
不知道或者没法指定一个相对视图的大小,但又要兼顾填充和对齐,并且还依赖与相邻的 view。调用alignAndFill()、alignAndFillWidth()、alignAndFillHeight()
```
view1.anchorInCenter(width: 200, height: 200)
view2.alignAndFillWidth(align: .toTheRightMatchingTop, relativeTo: view1, padding: 5, height: 30)
view3.alignAndFillHeight(align: .aboveCentered, relativeTo: view1, padding: 50, width: 60)
view4.alignAndFill(align: .toTheLeftMatchingTop, relativeTo: view1, padding: 5)
```

# 挤压对齐
如果两个 view 夹着中间一个 view 的需求,调用alignBetweenHorizontal()和alignBetweenVertical()
view1.anchorInCenter(width: 150, height: 300)
view2.align(.toTheRightMatchingTop, relativeTo: view1, padding: 5, width: 100, height: 100)
view3.align(.toTheRightMatchingBottom, relativeTo: view1, padding: 5, width: 100, height: 100)
view4.align(.toTheRightCentered, relativeTo: view1, padding: 5, width: 100, height: 100)
view4.alignBetweenVertical(align: .aboveMatchingRight, primaryView: view3, secondaryView: view2, padding: 10, width: 50)
# 组合
多个view一起组合布局,调用groupInCenter()、groupInCorner()、groupAgainstEdge()
##### 居中对齐组合
```
view.groupInCenter(group: .vertical, views: [view1,view2,view3], padding: 10, width: size, height: size)
view.groupInCenter(group: .horizontal, views: [view1,view2,view3], padding: 20, width: size, height: size)
```

##### 角对齐组合 相对于superview某一个角组合排布
```
view.groupInCorner(group: .horizontal, views: [view1, view2, view3], inCorner: .bottomLeft, padding: 10, width: size, height: size)
view.groupInCorner(group: .vertical, views: [view1, view2, view3], inCorner: .bottomRight, padding: 10, width: size, height: size)

<br/>
##### 边对齐组合,相对于superview某一条边的中点排布
view.groupAgainstEdge(group: .horizontal, views: [view1, view2, view3], againstEdge: .left, padding: 10, width: size, height: size)
view.groupAgainstEdge(group: .vertical, views: [view1, view2, view3], againstEdge: .bottom, padding: 10, width: size, height: size)


第三方布局框架Neon初探的更多相关文章
- [Swift通天遁地]六、智能布局-(8)布局框架的使用:多分辨率适配和横竖屏布局
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- iOS常用第三方开源框架和优秀开发者博客等
博客收藏iOS开发过程好的开源框架.开源项目.Xcode工具插件.Mac软件.文章等,会不断更新维护,希望对你们有帮助.如果有推荐或者建议,请到此处提交推荐或者联系我. 该文档已提交GitHub,点击 ...
- Masonry 轻量级布局框架的使用
iOS 提供了自动布局的方法,但是原生的方法使用太过麻烦 ,Masonry 框架提供了类似的方法,同样可以实现自动布局 ,代码更加直观,而且容易理解. Masonry 是一个轻量级的布局框架.拥有自己 ...
- Android的SwipeToDismiss第三方开源框架模拟QQ对话列表侧滑删除,置顶,将头像图片圆形化处理。
<Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(github ...
- 第三方开源框架的下拉刷新列表(QQ比较常用的)。
PullToRefreshListView是第三方开源框架下拉刷新列表,比较流行的QQ 微信等上面都在用. 下载地址(此开源框架于2013年后不再更新) 点此下载 package com.lixu.k ...
- iOS基础 - 第三方网络框架
一.iOS网络层次结构 基于iOS提供API实现上传文件和断点续传的思路 常用iOS第三方网路框架简介 AFNetworking(AFN) ASIHTTPRequest(ASI) 另外一个常用框架 S ...
- Masonry布局框架的使用
Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性.比我们使用自动布局,繁琐的约束条件,好用多了.下面我们来学学masonry的使用方 ...
- IOS控件布局之Masonry布局框架
前言: 回想起2013年做iOS开发的时候,那时候并没有采用手写布局代码的方式,而是采用xib文件来编写,如果使用纯代码方式是基于window的size(320,480)计算出一个相对位置进行布局,那 ...
- iOS下的界面布局利器-MyLayout布局框架
Swift:TangramKit: https://github.com/youngsoft/TangramKit OC:MyLayout: https://github.com/youngsof ...
随机推荐
- 深入web的请求过程
一.深入web的请求过程 1.1.B/S网络架构概述 · 从前端到后端,都基于应用层协议HTTP来交互数据.一个请求就对应了一个操作,完成操作之后就断开了连接.基于这样的特点可以用来满足海量的用户的操 ...
- 【1】学习C++时,一些零散知识点01
1.编程理念 学习从学习完C后,接触了C++,最重要的便是编程理念的转变.C缩重视的是结构化编程,面对一个较大的程序,就将他分解成小型.便于管理的任务,如果分解后的任务还是偏难过大的话,那将这个任务继 ...
- python基础之文件操作和函数
一.知识点 1.三元运算 a = 2 b = 3 val = 6 if a < b else 7 print(val) 2.文件读取 f = open(file='file.txt',mode= ...
- Codeforces Round #541 (Div. 2)题解
不知道该更些什么 随便写点东西吧 https://codeforces.com/contest/1131 ABC 太热了不写了 D 把相等的用并查集缩在一起 如果$ x<y$则从$ x$往$y$ ...
- JAVA进阶17
---恢复内容开始--- 间歇性混吃等死,持续性踌躇满志系列-------------第17天 1.递归结构 递归是一种常见的解决问题的方法,即把问题逐渐简单化.递归的基本思想就是自己就是“自己调用自 ...
- Linux安装网易云音乐
⒈下载最新版网易云音乐安装包 http://d1.music.126.net/dmusic/netease-cloud-music_1.2.0_amd64_ubuntu_20190424_1.deb ...
- #20175204 张湲祯 2018-2019-2《Java程序设计》第六周学习总结
20175204 张湲祯 2018-2019-2<Java程序设计>第六周学习总结 教材学习内容总结 -第七章内部类与异常类要点: 一.内部类: Java支持在一个类中定义另一个类,这样的 ...
- CVE-2018-19386:SolarWinds数据库性能分析器中反射的XSS
漏洞 在SolarWinds的11.1.457版中,"idcStateError.iwc"错误页面中存在Reflected Cross-Site Scripting漏洞,已经在版本 ...
- Freemarker网页静态化
Freemarker的jar包 创建整合spring的配置文件 <?xml version="1.0" encoding="UTF-8"?> < ...
- Spring中@Component注解,@Controller注解详解
在使用Spring的过程中,为了避免大量使用Bean注入的Xml配置文件,我们会采用Spring提供的自动扫描注入的方式,只需要添加几行自动注入的的配置,便可以完成 Service层,Controll ...