2009-12-31 106 views

回答

210

它設置內容視圖和封閉滾動視圖之間的插入距離。 aScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0);

這裏有一個很好的iOS Reference Library article on scroll views有一個信息截圖(圖1-3) - 我會通過文字在這裏複製它:

_|←_cW_→_|_↓_ 
    |  | 
--------------- 
    |content| ↑ 
↑ |content| contentInset.top 
cH |content| 
↓ |content| contentInset.bottom 
    |content| ↓ 
--------------- 
    _|_______|___ 
      ↑ 


    (cH = contentSize.height; cW = contentSize.width) 

滾動視圖包圍內容視圖加上提供任何填充由指定的內容插入。

+0

是否用於向UIScrollView添加填充值?如果不是,你能給我一個實際的例子。我的問題不是如何實現它,而是何時實現它。 – ForeignerBR 2009-12-31 01:29:33

+27

是的,它填充滾動視圖內部的內容。它類似於CSS'padding'屬性。 – 2009-12-31 01:37:20

+0

對不起,我可以移動它自己的問題,但基於此,如果您將每個contentInset值設置爲0而不是contentHeight,例如實際發生了什麼?這是否會迫使整個scrollview成爲您設置的高度? – jakev 2013-04-14 17:33:32

2

偉大的問題。

考慮下面的例子(scroller是一個UIScrollView):

float offset = 1000; 
[super viewDidLoad]; 
for (int i=0;i<500; i++) { 
    UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(i * 100, 50, 95, 100)] autorelease]; 
    [label setText:[NSString stringWithFormat:@"label %d",i]]; 
    [self.scroller addSubview:label]; 
    [self.scroller setContentSize:CGSizeMake(self.view.frame.size.width * 2 + offset, 0)]; 
    [self.scroller setContentInset:UIEdgeInsetsMake(0, -offset, 0, 0)]; 
} 

中的插圖是隻有這樣才能迫使你的滾輪有在哪裏你想要的內容的「窗口」。我仍然在討論這個示例代碼,但是這個想法就在那裏:使用insets在UIScrollView上獲得一個「窗口」。

76

雖然jball的回答是對內容插頁的精彩描述,但它並沒有回答何時使用它的問題。我會從他的圖表借:

_|←_cW_→_|_↓_ 
    |  | 
--------------- 
    |content| ↑ 
↑ |content| contentInset.top 
cH |content| 
↓ |content| contentInset.bottom 
    |content| ↓ 
--------------- 
    |content|  
-------------↑- 

這就是當你這樣做你會得到什麼,但它的用處只能說明當您滾動:

_|←_cW_→_|_↓_ 
    |content| ← content is still visible 
--------------- 
    |content| ↑ 
↑ |content| contentInset.top 
cH |content| 
↓ |content| contentInset.bottom 
    |content| ↓ 
--------------- 
    _|_______|___ 
      ↑ 

這內容頂行仍然會因爲它仍然在滾動視圖的框架內。考慮頂部偏移量的一種方法是「當滾動到頂部時,滾動視圖的內容向下移動多少」

要查看實際使用該位置的位置,請查看構建在iPhone上的照片應用程序。導航欄和狀態欄是透明的,並且滾動視圖的內容在下面可見。這是因爲滾動視圖的框架延伸到那麼遠。但是,如果不是內容插入的內容,當您一路走到最前面時,您永遠無法將內容的頂部清除該透明導航欄。

+0

這裏的好處是,您可以使用插入來創建「在模糊狀態欄下滾動」效果。 – TheEye 2014-03-12 12:04:04

+0

很好的解釋,upvoted。 – 2014-07-27 06:31:24

+0

關於照片應用的例子很容易理解。 – abhi1992 2017-09-14 07:24:19

7

內容插入問題解決了將內容放在用戶界面的其他部分下但仍然可以使用滾動條保持可訪問的問題。換句話說,內容插入的目的是使交互區域小於其實際區域。

考慮這樣的情況,我們有屏幕的三個邏輯方面:

TOP BUTTONS 

TEXT 

BOTTOM TAB BAR 

,我們希望文字從來沒有透明地出現在最上面的扣子下方,但我們想要的文字出現在底部標籤欄下方但仍然允許滾動,因此我們可以更新透明地坐在BOTTOM TAB BAR下的文本。

然後,我們將頂部原點設置在TOP按鈕下方,並將高度設置爲包含底部標籤底部的底部。要訪問坐在BOTTOM TAB BAR內容下方的文本,我們將底部插入設置爲BOTTOM TAB BAR的高度。

如果沒有插圖,滾動條不會讓您向上滾動內容以輸入內容。使用插圖,就好像內容具有額外的「BLANK CONTENT」內容插入的大小。空白文本已被「插入」到真實的「內容」 - 這就是我記住這個概念的方式。

1

它用於在UIScrollView

添加填充沒有contentInset,表視圖是這樣的:

enter image description here

然後設置contentInset

tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0) 

的效果如下:

enter image description here

似乎更好,對不對?

我寫了一個blog來研究contentInset,歡迎批評。