我的代碼我的坑(五) —— 不可編輯狀態(tài)的UITextView文本高度大于視圖高度默認(rèn)滾動(dòng)到底部的問(wèn)題(一)

版本記錄

版本號(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è)置其contentOffsetCGSizeZero,但是發(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)注~~~

最后編輯于
?著作權(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)容

  • 一、簡(jiǎn)介 <<UITextView(文本視圖) : UITextView可以輸入多行文字并且可以滾動(dòng)顯示瀏覽全文的...
    無(wú)邪8閱讀 8,492評(píng)論 6 1
  • UITextField : 只能輸入一行,不可以滾動(dòng),可以設(shè)置提醒文字。 UITextView: 能輸入多行,可以...
    甜水八角閱讀 3,532評(píng)論 0 5
  • 很喜歡一句話: 成年人的友情,不是初次見(jiàn)面后 就有相見(jiàn)恨晚的感覺(jué) 而是歷經(jīng)滄桑后,能由衷地說(shuō): 能認(rèn)識(shí)你真好 我想...
    芭比娃娃L閱讀 349評(píng)論 0 1
  • 昨天我在工作總結(jié)寫了這樣一段話:每天我都是被自己打敗的,因?yàn)槊刻煳铱倳?huì)無(wú)意間就犯小錯(cuò)誤,每天都要被批評(píng)教育。這樣的...
    李想的生活閱讀 188評(píng)論 0 1
  • 甜蜜冰爽半透明的回憶盛載著愉悅的基因 好看Q彈搞不懂的秘密帶來(lái)了時(shí)間的魔術(shù) 這是一輩子也忘不了的歡樂(lè)好像沒(méi)甚麼特別...
    思考空間閱讀 219評(píng)論 0 4

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