showsHorizontalScrollIndicator設(shè)置為true導(dǎo)致crash的問題

代碼寫的scrollView,superView是xib寫的view,大家都知道xib里的view調(diào)的子類初始化方法都是init?(coder:),但是在調(diào)用init的時(shí)候是沒有賦值frame的,所以我override了frame,在didSet里做的初始化,大概代碼:

override var frame:CGRect{

? ? ? ?didSet{

? ? ? ? ? ?self.showsHorizontalScrollIndicator=true;

? ? ? ?}

}

再運(yùn)行直接crash,當(dāng)時(shí)很不理解為什么這里會(huì)crash,控制臺(tái)的log是CALayerInvalidGeometry,reason: 'CALayer position contains NaN: [nan nan]'

查了下大概是視圖無(wú)限大導(dǎo)致crash,初步估計(jì)原因是調(diào)用這一句會(huì)讓frame發(fā)生變化,死循環(huán)導(dǎo)致crash,于是打了個(gè)斷點(diǎn),發(fā)現(xiàn)didSet這里其實(shí)也就調(diào)用了一次,然后直接就crash了。

好吧,那我改成false,crash問題是解決了,但是發(fā)現(xiàn)另一個(gè)問題:在frame的set回調(diào)里設(shè)置showsHorizontalScrollIndicator為false根本沒用,文檔上這個(gè)值應(yīng)該默認(rèn)是true,但是我在frame的set回調(diào)里print出來showsHorizontalScrollIndicator這個(gè)值是false,但是當(dāng)我滾動(dòng)的時(shí)候在scrollViewDidScroll(_:)里打出來的showsHorizontalScrollIndicator是true,也就是說UIKit給UIScrollView設(shè)置showsHorizontalScrollIndicator的時(shí)機(jī)是在setFrame之后,所以即使我在frame的set回調(diào)里把showsHorizontalScrollIndicator改成了false,之后UIKit又會(huì)把showsHorizontalScrollIndicator改成默認(rèn)的true。

然后這個(gè)frame的設(shè)置和showsHorizontalScrollIndicator的設(shè)置順序是不是跟他的superView是xib有關(guān)系呢?

我又用代碼寫了個(gè)superView試了一下,結(jié)果一樣。

至于crash問題,由于看不到UIKit代碼,我只能猜想是在設(shè)置showsHorizontalScrollIndicator為true的時(shí)候,里面有修改frame相關(guān)的代碼,但是這些代碼不會(huì)調(diào)外部回調(diào),swift不知道怎么直接重寫setFrame方法,明天用OC試試。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容