美文网首页JC专题
解决FDStackView在Swift下的Bug一则

解决FDStackView在Swift下的Bug一则

作者: fever105 | 来源:发表于2016-03-03 20:37 被阅读372次

    解决FDStackView在Swfit下的Bug一则


    Apple在iOS 9推出了UIStackView,使得线性布局变得简单易行,再也不用劳神劳力的手写Frame,或者用UITableView / UICollectionView这种大家伙实现简单的布局结构了。美中不足的是,这个控件目前只支持iOS 9,因此,ForkingDog团队推出了FDStackView这个框架,只需简单的集成进项目,即可使UIStackView支持到iOS 6,真是神器。经过简单的了解,发现他是通过运行时注入的手段来达到这一目的,在OC下使用暂时没有问题,可是到了Swift(因为Swift对运行时的处理方式同OC有区别),就会出现一些问题。


    Bug描述

    • 发生环境:Swfit + iOS8.1 + 代码创建UIStackView
    • 表现:程序崩溃,停留在使用UIStackView那一行代码,提示Bad Access

    解决过程

    首先百度“FDStackView + Swift”,然而并没有什么相关的结果。直接跑到FDStackView的GitHub页面,在issues一栏,发现了一些端倪:

    • 这里,有人说在Swfit下,iOS8.1,8.2会崩溃,而iOS8.4没问题。

    • 作者没有回答这个 issue,但是提问者说利用OC代码返回一个UIStackView实例,问题得到了解决,并给出了一个例子:

      + (UIStackView *)stackView {
          return [[UIStackView alloc] init];
      }
      
    • 并且提问者还补充,如果是使用cocoaPods 集成的FDStackView,则会由于动态库的原因,上面的OC代码会返回nil。所以需要以静态库的方式调用FDStackView(我个人还没有搞清楚两者的区别)

    解决方法

    在进行若干次尝试后,终于成功解决了问题,具体步骤如下:

    1. 删除cocoaPods所集成的FDStackView,具体方法为:

      • 删除Podfile中关于FDStackView的内容
      • 在终端内执行pod install --verbose --no-repo-update
      • 命令执行完毕,框架就被删除了
    2. 下载FDStackView的代码,手动拖入项目中

    3. 在桥接文件内导入FDStackView.h

    4. 创建一个OC类,名为XXStackView,继承自FDStackView,什么内容都不用写(通过测试,不用写上面的代码,这样也最省事),并将其头文件写入桥接文件

    5. 项目中所有需要使用代码创建UIStackView的地方都适用XXStackView,但Xib中依然可以直接使用UIStackView


    后记

    通过查询, FDStackView貌似貌似是通过插入內联汇编代码的方式来将自己替换UIStackView的,具体讨论可以参看一下文章:

    相关文章

      网友评论

        本文标题:解决FDStackView在Swift下的Bug一则

        本文链接:https://www.haomeiwen.com/subject/jzcokttx.html