2012-10-23 48 views
3

我的問題是: 在我的應用我想用UIScrollViewUIScrollView的固定內容裏面

enter image description here

一個UIScrollView白衣他所有的內容裏面實現這樣出頭。但是,當我到達屏幕的頂部(或者屏幕的底部)時,我想錨定一些內容,如AppStore(iOS 6)。

enter image description here

在這種情況下,「詳細信息」,「評論」和「相關」按鈕停止滾動,並保持固定在頂部。

任何人有任何想法怎麼辦?

回答

8

給你的滾動視圖的委託,如果它不已經有一個。這可能是你的視圖控制器。

也給委託到浮動視圖的參考。 (在該示例中,浮置視圖包含「Dettagli」,「Recensioni」和「Correlati」按鈕和浮動視圖是透明的,其中三角形的凹口是,和陰影也是浮動視圖的一部分。)浮動視圖必須是滾動視圖的子視圖。

保存「正常」 Y浮動視圖的框架的在一個實例變量座標。例如,如果委託是一個視圖控制器,你應該做它在viewDidLoad

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    originalFloatingViewY = floatingView.frame.origin.y; 
} 

在委託的scrollViewDidScroll:方法,檢查滾動視圖是否已滾動下方的「正常」位置的頂部浮動視圖。如果是這樣,將浮動視圖的可見區域的上邊緣:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    [self updateFloatingViewFrame]; 
} 

- (void)updateFloatingViewFrame { 
    CGPoint contentOffset = scrollView.contentOffset; 

    // The floating view should be at its original position or at top of 
    // the visible area, whichever is lower. 
    CGFloat y = MAX(contentOffset.y, originalFloatingViewY); 

    CGRect frame = floatingView.frame; 
    if (y != frame.origin.y) { 
     frame.origin.y = y; 
     floatingView.frame = frame; 
    } 
} 

你也可以做到這一點通過繼承UIScrollView和壓倒一切的layoutSubviews。有關此技術的更多信息,請觀看WWDC 2011的「高級滾動視圖技術」視頻。

0

您需要在UIScrollView's委託方法(scrollViewDidScroll :)中處理此操作以進行滾動。當scrollviewy達到特定的價值,你需要禁用這個方向滾動孤獨。你只需要添加一個if條件那裏檢查並重置y點,同時滾動。爲此,您可能必須將此特定部分作爲單獨的滾動視圖保存在下面的內容之外,並將其與下面的滾動視圖的向上移動一起移動。

+0

這是部分正確的...但我不想在這個方向上禁用滾動:我想停止的部分內容,但其他內容只是繼續以固定內容滾動下。查看AppStore,瞭解我究竟想要什麼。 – Fry

+0

你需要保持兩個不同的滾動視圖,而不是單個滾動視圖。在scrollViewDidScroll委託方法中,您需要處理兩者的移動。例如:添加一個if條件來檢查哪個滾動視圖正在移動。如果將scrollview1移動到scrollview1.y iDev