最近在項目開發(fā)中發(fā)現(xiàn)自己對于UIScrollView的有些屬性不是很熟悉佑菩,所以在此借助“大醉和尚”的微博更新一下自己的知識抛人。
在iOS開發(fā)中可以說UIScollView是所有滑動類視圖的基礎,包括UITableView,UIWebView,UICollectionView等等邪锌,UIScrollView類為顯示大于應用程序窗口的內(nèi)容提供支持楣铁。它使得用戶可以使用滑動手勢來滾動,并可以使用擴張/收縮手勢來放大縮小部分內(nèi)容缀旁。UIScrollView類可以擁有一個代理记劈,該代理采用UIScrollViewDelegate協(xié)議。對于縮放的工作并巍,代理必須實現(xiàn)viewForZoomingInScrollView:以及scrollViewDidEndZooming:withView:atScale:目木;此外,最大(maximumZoomScale)和最小(minimumZoomScale)縮放規(guī)模必須不同懊渡。
其中有很多常用到的屬性設置和方法刽射,在這里統(tǒng)一做下記錄。
屬性
automaticallyAdjustsScrollViewInsets
設置UITextView或者UITableView時剃执,文字上方或table上總會留一片空白區(qū)域誓禁,原因在于navigation bar!I龅怠摹恰!
凡是繼承UIScrollView的控件都會受到UIViewController的這個automaticallyAdjustsScrollViewInsets屬性的影響,默認為YES怒见,當有navigation bar的時候,UITextView的表現(xiàn)就是上面空白俗慈,設為NO,UITextView就正常了。
如果用了storyboard,那么也可以在storyboard里面做更改
alwaysBounceHorizontal
布爾值遣耍,規(guī)定是否在水平方向在滾動到末尾時產(chǎn)生“反彈”闺阱。
若該屬性及bounces被設定為YES,水平拖拽即使在內(nèi)容小于滾動視圖邊緣時也被允許配阵。默認值為NO馏颂。
alwaysBounceVertical
布爾值,規(guī)定是否在垂直方向在滾動到末尾時產(chǎn)生“反彈”棋傍。
若該屬性及bounces被設定為YES救拉,垂直拖拽即使在內(nèi)容小于滾動視圖邊緣時也被允許。默認值為NO瘫拣。
bounces
布爾值亿絮,控制是否滾動視圖能否超出內(nèi)容邊緣再彈回。
若該屬性的值為YES。滾動視圖會在遇到內(nèi)容邊緣時反彈派昧。若值為NO黔姜,滾動會在達到邊緣時立即停止而不反彈。默認值為YES蒂萎。
bouncesZoom
布爾值秆吵,規(guī)定滾動視圖是否在縮放超出最大值和最小值動畫時播放內(nèi)容縮放動畫。
若該屬性的值為YES五慈,在縮放超出最大值或最小值時纳寂,滾動視圖會臨時播放一個稍超出限制范圍的動畫再返回限制大小。若該屬性為NO泻拦,縮放會在達到限制大小時立即停止毙芜,默認為YES。
canCancelContentTouches
布爾值争拐,控制觸摸內(nèi)容視圖時是否總是導致跟蹤腋粥。
若該屬性的值為YES,內(nèi)容中的視圖會開始跟蹤觸摸的手指架曹,若用戶拖拽手指到足以滾動的距離隘冲,視圖會收到touchesCancelled:withEvent:信息,而滾動視圖會作為一個滾動事件處理這次觸摸音瓷。若該屬性的值為NO对嚼,滾動視圖在內(nèi)容視圖開始跟蹤時將無視手指移動,不進行滾動绳慎。
contentInset
表示內(nèi)容視圖從封閉滾動視圖中被嵌入的距離纵竖。
用該屬性增加圍繞內(nèi)容的滾動區(qū)域。單位為點杏愤。默認值為UIEdgeInsetssZero靡砌。
contentOffset
表示從滾動視圖的原點到內(nèi)容視圖的原點的偏移的點。
默認值為CGPointZero珊楼。
contentSize
內(nèi)容視圖的大小通殃。
單位是點。默認值是CGSizeZero厕宗。
decelerating
返回滾動視圖中的內(nèi)容是否在提起手指后繼續(xù)移動画舌。(只讀)
若用戶已不再拖拽內(nèi)容但滾動還在發(fā)生時返回YES。
decelerationRate
浮點數(shù)已慢,規(guī)定用戶提起手指后的滾動減速速率曲聂。
你的應用程序可以使用UIScrollViewDecelerationRateNormal和UIScrollViewDecelerationRateFast常量作為引用點以獲得一個合理的減速速率。
delaysContentTouches
布爾值佑惠,規(guī)定滾動視圖是否延遲處理觸摸下壓手勢朋腋。
若該屬性值為YES齐疙,滾動視圖會延遲處理下壓手勢直到可以確定該操作的意圖是否是滾動。若值為NO旭咽,滾動視圖會立即調(diào)用touchesShoudBegin:withEvent:inContentView:贞奋。默認值為YES。
具體討論詳見類討論穷绵。
delegate
滾動視圖對象的托管轿塔。
托管必須實現(xiàn)UIScrollViewDelegate協(xié)議。UIScrollView類(不保持托管)请垛,會調(diào)用托管實現(xiàn)中的每一個方法催训。
directionalLockEnabled
布爾值,規(guī)定是否滾動在某一方向上被禁止宗收。
若該屬性為NO,滾動在水平和垂直方向上都被允許亚兄。若該屬性為YES混稽,當用戶開始某一方向的滾動(水平或垂直),滾動視圖會禁止另一方向的滾動审胚。若以對角線方向拖動匈勋,滾動則不會被鎖定且用戶在本次拖動完成之前可以在任意方向拖動。默認值為NO膳叨。
dragging
布爾值洽洁,表明用戶是否開始滾動內(nèi)容。
該屬性持有的值可能需要滾動一段時間或距離才會被設定成YES菲嘴。
indicatorStyle
滾動控制器的風格饿自。
默認風格是UIScrollViewIndicatorStyleDefault。參見“Scroll Indicator Style”獲取更多關于此常量的描述龄坪。
maximumZoomScale
浮點數(shù)昭雌,指定可被應用滾動視圖內(nèi)容的最大縮放因子。
該值規(guī)定了內(nèi)容可被放大到多大健田。默認值為1.0烛卧。
minimumZoomScale
浮點數(shù),指定可被應用滾動視圖內(nèi)容的最小縮放因子妓局。
該值規(guī)定了內(nèi)容可被縮小到多小总放。默認值為1.0。
pagingEnabled
布爾值好爬,規(guī)定滾動視圖是否可以翻頁局雄。
若該值為YES,滾動視圖會在用戶滾動時停止在滾動視圖邊框的整數(shù)倍處抵拘。默認值為NO哎榴。
panGestureRecognizer
當前用于滑動手勢的手勢識別器(只讀)
在希望更加精確地控制被滾動視圖識別的滑動手勢時型豁,你的應用程序可訪問此屬性。
pinchGestureRecognizer
當前用于擴張/收縮手勢的手勢識別器(只讀)
在希望更加精確地控制被滾動視圖識別的擴張/收縮手勢時尚蝌,你的應用程序可訪問此屬性迎变。
scrollEnabled
布爾值,規(guī)定是否允許滾動飘言。
若該屬性的值為YES衣形,允許滾動,若為NO姿鸿,禁止?jié)L動谆吴。默認值為YES。
當滾動被禁止時苛预,滾動視圖將不再接受觸摸事件句狼;滾動視圖會將事件傳送至響應鏈中。
scrollIndicatorInsets
表示滾動指示器從封閉滾動視圖中被嵌入的距離热某。
默認值為UIEdgeInsetssZero腻菇。
scrollToTop
布爾值,控制滾動至頂部的手指是否有效昔馋。
滾動至頂部手勢是觸摸狀態(tài)欄筹吐;當此屬性為YES時,滾動視圖在此手勢發(fā)生時跳轉至狀態(tài)欄秘遏。此屬性默認為YES丘薛。
該手勢作用于單個可見的滾動視圖;若有多個滾動視圖(例如邦危,日期選擇器)設定了這個屬性洋侨,或者若托管在scrollViewShouldScrollToTop:中返回了NO,UIScrollView會無視滾動到頂部的請求铡俐。在滾動視圖滾動到內(nèi)容視圖的頂部之后凰兑,它會給托管發(fā)送一個scrollViewDidScrollToTop:信息。
showsHorizontalScrollIndicator
布爾值审丘,控制是否水平滾動指示器可見吏够。
默認值為YES。指示器會在跟蹤時顯示并在跟蹤之后消失滩报。
showsVerticalScrollIndicator
布爾值锅知,控制是否垂直滾動指示器可見。
默認值為YES脓钾。指示器會在跟蹤時顯示并在跟蹤之后消失售睹。
tracking
返回用戶是否觸摸內(nèi)容并初始化滾動隘竭。(只讀)
若用戶已觸摸內(nèi)容視圖但可以還示開始拖動時該屬性值為YES晕拆。
zoomBouncing
布爾值耀鸦,表明縮放已超過了指定接收器的縮放限制稀拐。
若滾動視圖縮放超出最大值或最小值時該值為YES;否則值為NO飞崖。
zooming
布爾值烂叔,表明內(nèi)容視圖當前是否在縮。
若用戶發(fā)出了一個縮放手指固歪,該值為YES蒜鸡,否則為NO。
zoomScale
浮點數(shù)牢裳,指定當前應用于滾動視圖的內(nèi)容的縮放因子逢防。
該值規(guī)定了內(nèi)容當前縮放了多少。默認值是1.0蒲讯。
方法
flashScrollIndicators
短暫地顯示滾動指示器忘朝。
你應該在把滾動視圖放在最前端時調(diào)用此方法。
scrollRectToVisible:animated:
滾動內(nèi)容的指定區(qū)域以便使內(nèi)容在接受器中可見判帮。
-(void)scrollRectToVisible:(CGRect)rectanimated:(BOOL)animated
參數(shù):
rect
定義內(nèi)容視圖區(qū)域的矩形辜伟。
animated
若滾動應被動畫化則傳入YES,否則為NO脊另。
該方法滾動內(nèi)容視圖以使rect中定義的區(qū)域可以剛好顯示在滾動視圖中。若區(qū)域已經(jīng)是可見的约巷,該方法什么也不做偎痛。
setContentOffset:animated:
設定內(nèi)容視圖原點相對于接收器原點的偏移。
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
參數(shù)
contentOffset
內(nèi)容視圖原點的偏移點(以點的形式表示)独郎。
animated
若YES踩麦,用一個恒定的速度以動畫形式移動到新的偏移處;NO則立即移動氓癌。
setZoomScale:animated:
浮點數(shù)谓谦,指定當前縮放因子。
- (void)setZoomScale:(float)scale animated:(BOOL)animated
參數(shù)
scale
要縮放內(nèi)容到的新值贪婉。
animated
若YES反粥,動畫化縮放到時新的縮放大小,NO則立即縮放疲迂。
新的縮放值應在minnumZoomScale和maximumZoomScale之間才顿。