Swift - Cell自适应+代码约束(SnapKit)横竖屏支持平铺+根据URL获取图片size

简介: Swift - Cell自适应+代码约束(SnapKit)横竖屏支持平铺+根据URL获取图片size

对于适配博主早已仰慕已久,后来看了Masonry之后,也是对代码约束有了初步了解,慢慢的接触到Swift,就想把约束带进Swift,刚好Masonry的团队也开发了针对Swift约束的SnapKit库,索性就练习下,cell自适应在前面有用Object-C写过,但是当时用的是相对布局,也不支持横屏。这里的代码在原基础上采用Swift,改进了一些细节,下面慢慢介绍:


1.获取图片size

原先获取图片size是在cell布局时来获取的,而在获取图片size时是要发起网络请求的,so,除了阻塞主线程之外还会让tableview滚动起来奇卡无比,解决的办法就是在下载完数据的时候在下载的线程中直接获取图片的size并存储在字典中备下面使用,因为size有了,不管横竖屏只要有size得到的比例,可以完美适配。


2.使用原生方法进行请求时要回调主线程刷新UI

前面博主由有发过怎么用原生的请求方法来访问网络,但是在这个Demo中博主犯了一个低级错误,因为原生请求本身就是一个线程,而博主用第三方的用习惯了,直接在请求完成后刷新tableview,在这个子线程中无疑会阻塞主线程,所以会看到等了好久才刷新出来数据,正确的做法是回到主线程:

 dispatch_async(dispatch_get_main_queue(), {
                print("OK")
                self.creatTableView()
                self._tableView.reloadData()
            })

3.横竖屏时屏幕width和height的变化

var WIDTH = UIScreen.mainScreen().bounds.size.width
var HEIGHT = UIScreen.mainScreen().bounds.size.height

获取屏幕宽高有好多种办法,以上只是一种,那么在横屏时以上值是否变化呢?


实际上博主看了是没有变化的,高度是跟宽有点关系的,所以需要检测当前屏幕的状态了:

if UIDevice.currentDevice().orientation == .Portrait  
{
                width = WIDTH
}
else
{
                width = HEIGHT
}

这样一来横竖屏就适配了。


这里先不放代码了,需要的自行下载:

https://github.com/codeliu6572/sizeSwift_cellLayout_getImageSizeByURL

目录
相关文章
|
19天前
|
C++
【C++】在使用代码组装URL时,一定要注意的坑......
【C++】在使用代码组装URL时,一定要注意的坑......
17 0
|
7月前
|
Swift 数据安全/隐私保护
40 Swift中代码访问权限控制
Swift中代码访问权限控制
44 0
|
5月前
|
数据处理
Axios 默认配置 简化URL 简化代码 多台服务器接口配置
Axios 默认配置 简化URL 简化代码 多台服务器接口配置
|
8月前
|
Web App开发 数据采集 API
使用代码获得知乎文章的标题和 url
使用代码获得知乎文章的标题和 url
95 0
|
Swift
Swift - 根据图片URL获取图片的大小
Swift - 根据图片URL获取图片的大小
478 0
|
安全 测试技术 Python
Tornado框架的异步代码单元支持同步获取URL在项目里实战的心得和方法
Tornado框架的异步代码单元支持同步获取URL在项目里实战的心得和方法
120 0
|
前端开发 JavaScript
tp5中前端js代码中ajax请求url问题
tp5中前端js代码中ajax请求url问题
141 0
|
数据采集 缓存 搜索推荐
SAP 电商云 Spartacus UI 有状态 的 url 和 title 属性的赋值代码
SAP 电商云 Spartacus UI 有状态 的 url 和 title 属性的赋值代码
98 0
SAP 电商云 Spartacus UI 有状态 的 url 和 title 属性的赋值代码
|
Android开发
Android 通过图片url获取图片的宽高
Android 通过图片url获取图片的宽高
323 0
|
Swift
Swift :SnapKit 更新约束 & label宽度自适应
Swift :SnapKit 更新约束 & label宽度自适应
1167 0