美文网首页
iOS (Xcode) 疑难杂症

iOS (Xcode) 疑难杂症

作者: 广锅锅 | 来源:发表于2021-01-09 00:26 被阅读0次

    今天被 Xcode 大坑了一把。(我一直认为『重启大法好』,是针对 Windows 系统的,从没想过 Xcode 偶尔也是需要的)

    公司支持的最低版本是 iOS10.0,离它发布已经过去 4 年多了,Xcode 12 自带的模拟器都要求支持 iOS14 了。恰好呢,UIStackView 支持自定义间距是在 iOS11 才开始支持的

    - (void)setCustomSpacing:(CGFloat)spacing 
                   afterView:(UIView *)arrangedSubview 
                   API_AVAILABLE(ios(11.0),tvos(11.0));
    - (CGFloat)customSpacingAfterView:(UIView *)arrangedSubview 
                            API_AVAILABLE(ios(11.0),tvos(11.0));
    

    就这么一个小功能,我却觉得是 UIStackView 最值得使用的地方了,奈何我们得支持更低的 iOS10 啊。在经历了冗长的约束创建,元素之间首尾手动连接、不确定性连接,这样的痛苦让人实在难以忍受了。于是撸起袖子好好研究了下它,终于激动的找到了解决方法,也就是对它进行改造或扩展,用自己的代码实现了自定义间距功能。

    终于愉快的用上了 UIStackView,对比了下这两段代码,没有它写了 140 行代码,而用了它之后,代码直降 100 行,还少了很多 if 判断,简直爽的不行。

    秉着严谨、提高代码健壮性的态度,我当然要测测它在 iOS10 上的表现如何,结果也很是完美!

    我太强了.jpg

    言归正传

    言归正传了,我们的工程第一次运行在 iOS10 上,我就发现了一个小 bug:table view cell 不能根据约束自动撑开了,它的高度固定为 44 了,上面的元素被挤压得看不见(高度为0)、或者图片超出 contentView。

    解决办法嘛很简单,稍微查了下发现是 tableView.estimatedRowHeight 没有设置,在 iOS10 系统下,必须要给它设置一个大于0的值,tableViewCell 才会开启自动约束撑开高度的功能。

    然而就是这时见了鬼了,这招死活不管用。更诡异的是有三个列表都用了这个特性,有一个列表从头到尾一直好好的,还有两个列表就死活撑不开。区别也就是那个好的列表它设置了估计高度,有问题的列表刚开始没有设置后来设置了。

    怎么设置了还是不行?是不是时机不对?我一直围绕着这个属性调试,结果断点调试时遇到了更令人怀疑人生的事


    iOSyinan.png

    图中第 36 行的断点,如果我什么都不做,就放开让它过去,列表就是坏的,内容撑不开。

    但是!!如果我在 lldb 里把这行代码一模一样的执行一下,然后放开断点,神奇的列表...就好了...内容都自动撑开了,动态的高度也没有任何问题。

    这就触及到我的知识盲区了,对科学的信仰几乎就要崩塌了,好想找本玄学的书来看看。找来同事结果变成了两个一脸懵逼。

    也不知哪根筋突然灵光了,我突然想到我怎么不重启试试,然后,™d问题就这样解决了。

    深呼吸.jpg

    心情平静之后,回想起来,我其实早在调试时就发现了不对劲的征兆。我要告诫自己,下次再遇到什么不对劲,直接果断重启!果断重启!<big>重启!</big>

    相关文章

      网友评论

          本文标题:iOS (Xcode) 疑难杂症

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