美文网首页
showsHorizontalScrollIndicator设置

showsHorizontalScrollIndicator设置

作者: wsxiaoluob | 来源:发表于2017-04-19 20:49 被阅读0次

    代码写的scrollView,superView是xib写的view,大家都知道xib里的view调的子类初始化方法都是init?(coder:),但是在调用init的时候是没有赋值frame的,所以我override了frame,在didSet里做的初始化,大概代码:

    override var frame:CGRect{

           didSet{

               self.showsHorizontalScrollIndicator=true;

           }

    }

    再运行直接crash,当时很不理解为什么这里会crash,控制台的log是CALayerInvalidGeometry,reason: 'CALayer position contains NaN: [nan nan]'

    查了下大概是视图无限大导致crash,初步估计原因是调用这一句会让frame发生变化,死循环导致crash,于是打了个断点,发现didSet这里其实也就调用了一次,然后直接就crash了。

    好吧,那我改成false,crash问题是解决了,但是发现另一个问题:在frame的set回调里设置showsHorizontalScrollIndicator为false根本没用,文档上这个值应该默认是true,但是我在frame的set回调里print出来showsHorizontalScrollIndicator这个值是false,但是当我滚动的时候在scrollViewDidScroll(_:)里打出来的showsHorizontalScrollIndicator是true,也就是说UIKit给UIScrollView设置showsHorizontalScrollIndicator的时机是在setFrame之后,所以即使我在frame的set回调里把showsHorizontalScrollIndicator改成了false,之后UIKit又会把showsHorizontalScrollIndicator改成默认的true。

    然后这个frame的设置和showsHorizontalScrollIndicator的设置顺序是不是跟他的superView是xib有关系呢?

    我又用代码写了个superView试了一下,结果一样。

    至于crash问题,由于看不到UIKit代码,我只能猜想是在设置showsHorizontalScrollIndicator为true的时候,里面有修改frame相关的代码,但是这些代码不会调外部回调,swift不知道怎么直接重写setFrame方法,明天用OC试试。

    相关文章

      网友评论

          本文标题:showsHorizontalScrollIndicator设置

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