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

来源:互联网 发布:高斯奥特曼未来型数据 编辑:程序博客网 时间:2024/05/16 12:21

对于适配博主早已仰慕已久,后来看了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.widthvar HEIGHT = UIScreen.mainScreen().bounds.size.height

获取屏幕宽高有好多种办法,以上只是一种,那么在横屏时以上值是否变化呢?
实际上博主看了是没有变化的,高度是跟宽有点关系的,所以需要检测当前屏幕的状态了:

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

这样一来横竖屏就适配了。
这里先不放代码了,需要的自行下载:
https://github.com/codeliu6572/sizeSwift_cellLayout_getImageSizeByURL

0 0
原创粉丝点击