版本記錄
| 版本號(hào) | 時(shí)間 |
|---|---|
| V1.0 | 2018.11.25 星期日 |
前言
做了好幾個(gè)APP,碰到了大大小小的很多坑,以前碰到坑,解決了就結(jié)束了,這里想把自己碰到的坑記錄下來(lái),一來(lái)給自己備查二來(lái)希望可以幫助到大家。感興趣的可以關(guān)注下,也歡迎大家補(bǔ)充留言,感興趣的看上面幾篇文章。
1. 我的代碼我的坑(一) —— 自簽名證書導(dǎo)致請(qǐng)求取消的問(wèn)題(一)
2. 我的代碼我的坑(二) —— UIImageView動(dòng)畫點(diǎn)擊后動(dòng)畫和圖片消失的問(wèn)題(一)
3. 我的代碼我的坑(三) —— iOS9系統(tǒng)WKWebView加載頁(yè)面白板的問(wèn)題(一)
4. 我的代碼我的坑(四) —— iOS12系統(tǒng)自定義漸變色UISwitch手機(jī)橫屏的異常問(wèn)題(一)
問(wèn)題描述
有的時(shí)候我們有這么一種小的需求,那就是需要向用戶展示一段文本,這個(gè)我們可以有很多方案,由于文本一般是云控配置的,所以一個(gè)要求就是不管文字多少都需要展示完全,這個(gè)我們首先想到使用就是UITextView這種可以滾動(dòng)的控件。
但是,我自定義一個(gè)view,當(dāng)我把這自定義view添加到window上的時(shí)候,有一個(gè)問(wèn)題就出現(xiàn)了,那就是當(dāng)文本高度大于視圖高度很多的時(shí)候,UITextView默認(rèn)滾動(dòng)到了底部,我雖然在xib中取消了editable,但是還是默認(rèn)滾動(dòng)到了底部。這個(gè)是給用戶展示信息用的,很明顯直接滾動(dòng)到底部體驗(yàn)很不好,應(yīng)該在頂部才對(duì)。
問(wèn)題解決
這個(gè)做了很多種嘗試去解決:
第一種很自然就想到,由于UITextView繼承自UIScrollView,所以在我們調(diào)用這個(gè)視圖進(jìn)行顯示的時(shí)候設(shè)置其contentOffset為CGSizeZero,但是發(fā)現(xiàn)這么做是不可以的。因?yàn)楦静黄鹱饔?,上網(wǎng)查了下,可能是由于UITextView是異步渲染,你在主線程設(shè)置contentOffset,但是渲染之后控件又根據(jù)尺寸滾動(dòng)到了底部,也就是時(shí)機(jī)問(wèn)題導(dǎo)致了失敗。
第二種就是在顯示的時(shí)候調(diào)用方法scrollRectToVisible:CGRectZero animated:YES,但是還是不管用還是失敗了,文本依舊默認(rèn)滾動(dòng)到了底部,究其原因可能和第一種方案是一樣的。
嘗試到了這里,感覺(jué)還是一個(gè)調(diào)用設(shè)置的時(shí)機(jī)不對(duì)。
解決方案:在顯示調(diào)用的時(shí)候,重新調(diào)用了一個(gè)setNeedsDisplay方法,然后重寫了- (void)drawRect:(CGRect)rect方法,在drawRect:方法里面重新設(shè)置了[self.contentTextView setContentOffset:CGPointZero animated:NO];,事實(shí)證明這個(gè)方法管用了,特別是在監(jiān)聽狀態(tài)欄方向發(fā)生改變的時(shí)候,還是調(diào)用setNeedsDisplay方法,讓系統(tǒng)自動(dòng)去調(diào)用drawRect:方法,textView也就默認(rèn)滾動(dòng)到頂部顯示文本了,這樣也在橫豎屏轉(zhuǎn)換的時(shí)候也可以實(shí)現(xiàn)完美效果了。
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
[self.contentTextView setContentOffset:CGPointZero animated:NO];
}
上面這個(gè)方案已經(jīng)經(jīng)過(guò)驗(yàn)證完美解決了這個(gè)小問(wèn)題。
思考:這里是自定義view上的textview的滾動(dòng),那么如果是控制器根view上的textview不能重寫drawRect:方法該怎么辦呢,其實(shí)可以在viewWillAppear:里面進(jìn)行嘗試。應(yīng)該也是可以的。
參考文章
1. [iphone] How do I force a UITextView to scroll to the top every time I change the text?
2.
后記
本篇主要講述了不可編輯狀態(tài)的UITextView文本高度大于視圖高度默認(rèn)滾動(dòng)到底部的問(wèn)題,感興趣的給個(gè)贊或者關(guān)注~~~
