2015-11-05 129 views
1

我構建了一個項目,它具有mapView(Google Maps),tableView和UIScrollView。 tableView位於底部,當應用程序啓動時,您會看到它的一小部分,其中大部分都在屏幕外(底部)。當用戶滾動tableView顯示並從底部向上時,直到它覆蓋了所有的屏幕。這一切都有效,但我有一個小問題:我希望用戶能夠觸摸地圖(縮放,移動等),但UIScrollView位於地圖的頂部,並且當用戶嘗試與地圖交互時scrollView檢測到滾動並且地圖沒有得到觸摸事件。 UIScrollView有沒有辦法檢測到地圖區域上的觸摸? scrollView應該覆蓋tableView檢測的所有屏幕(或者可能不是,還有另一種方式?),我不希望地圖成爲scrollView的子類,因爲當用戶滾動時它會與表一起滾動(我希望tableView可以放在地圖上,而不是放在地圖上)。 謝謝!檢測UIScrollView下的觸摸

+0

你可能需要澄清一下你在做什麼。你想要一個tableView在一個mapview的頂部,但沒有收到任何接觸? – Alex

+0

你這樣做的方式會變得有點複雜。您應該使滾動視圖從地圖底部開始,然後使用自動佈局和更新高度約束,當用戶滾動時,從屏幕頂部更新滾動視圖的空間。這樣,即使滾動視圖上方只顯示20個像素,您也可以觸摸地圖。你也應該發佈一些相關的代碼和圖片,以幫助每個人明確你想要做的事情。 –

+0

@MSU_Bulldog如何更新高度限制?也許你知道函數的名稱(ObjC) – Yahllilevy

回答

0

關閉我的評論。您需要將頂部空間設置爲滾動視圖上的超級查看約束。爲約束創建一個IBOutlet,爲約束的值創建一個浮點變量,並將其連接到頂層空間以超級查看約束,該約束將在界面生成器中在滾動視圖中創建。

在您的.h

IBOutlet NSLayoutConstraint *topSpace; 
float topSpaceValue; 

然後使用此更新約束:

topSpace.constant = topSpaceValue; 

您可以檢測滾動在用這種方法滾動視圖,並設置topSpace約束:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    topSpace.constant = topSpaceValue; 
} 

現在,檢測滾動視圖移動速度有多快的實際邏輯以及設置爲topSpaceValue是由你來弄清楚。您還需要檢測滾動視圖正在移動的方向,以增大或減小topSpaceValue的值。

這看起來像你需要的檢測速度的鏈接:iPhone UIScrollView Speed Check

所以根據速度設定的約束。你可能會想檢查約束的最小值,比如0,所以scrollview不會從屏幕的頂部滾動。