簡體   English   中英

iOS MKMapView,底部具有位置搜索

[英]iOS MKMapView with location search on bottom

我正在嘗試構建一個iOS 5應用程序,其中的地圖上填充了用戶位置周圍的點。 該地圖嵌套在導航控制器中,底部帶有搜索欄。 搜索欄連接到位於搜索欄下方的UITableView(用於搜索結果)。 所有這三個視圖都在UIScrollView中。

層次結構如下:

  • 導航控制器
    • UI視圖
      • 滾動視圖(包含以下3個)
        • 地圖檢視
        • 搜索欄
        • 表格檢視

抱歉,我無法發布圖片,但可以將您定向到另一個幾乎在做同樣事情的應用程序,即Dark Sky

這是我想發生的事情:當用戶點擊搜索欄中時,視圖向上滾動,顯示帶有結果的表視圖(同時移動以顯示“取消”按鈕)。 搜索並找到或取消后,視圖將向下滑動以再次顯示地圖(搜索欄位於底部)。 這與Dark Sky完美地完成了。

我看到了其他一些問題可以解決我的問題,但是,沒有一個問題能完整說明解決方案。 有關如何實施此操作的最佳做​​法?

您幾乎可以肯定不想在這里使用UIScrollView 僅當您希望用戶控制滾動時才使用它。

您可以使用現有的UISearchDisplayController功能,如TableSearch示例所示。 請注意,盡管該示例中的背景視圖是UITableView ,但這不是用於顯示搜索結果的示例表。 如果更改背景表格的樣式,則可以看到此信息。 因此,您還可以將MKMapView用作背景,並且仍然具有搜索結果表。

如果UISearchDisplayController提供的過渡行為不合適,則需要自己創建搜索結果表並為其設置動畫。 在界面設計中,將搜索結果表放在屏幕下方看不見的地方。 用戶搜索時,請使用UIView animateWithDuration:animations:將表移到正確的位置。 (只需使表格框架與地圖框架具有相同的值。)

如果允許旋轉到不同的設備方向,則在旋轉時可能需要更新工作台位置。

用戶輸入完搜索文本后,是否可以手動設置scrollView的內容偏移量?

將mapview偏移mapview的負高度。

myScrollView.contentOffset = CGSizeMake(0, -heightOfMapView);

或使用CGAffineTransformMakeTranslation

myScrollView.transform = CGAffineTransformMakeTranslation(0, -heightOfMap);

然后,當您想要返回地圖時,使用reset轉換轉換:

myScrollView.transform = CGAffineTransformMakeTranslation(0, 0);

只是一個想法:每個TableView都有一個屬性tableHeaderview:

@property(nonatomic, retain) UIView *tableHeaderView

searchBarmapView放在tableHeaderView 因此,您將tableHeaderView用作容器視圖,並相應地滾動tableView ,以便僅顯示tableHeaderView

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM