2014-10-02 82 views
1

我在iOS 7 & 8應用程序中實現了UISearchDisplayController。我使用Storyboard來構建界面,並且我已經成功地將搜索控制器添加到了我的表中,並且一切都很好,只要搜索工作正常。UISearchDisplayController使用AutoLayout約束的表格單元格渲染

我的問題是,表格行已配置使用自動佈局,以提供基於單元格內容的動態行高。雖然常規表格中的佈局正常,但這些約束不會應用於搜索結果表格中。這裏有一些漂亮的圖片來展示我的意思。

Left: Normal table view; Right: Search Results table

每個教程和文件的位假定結果表將有一個靜態的高度,建議是使用tableview.rowHeighttableView:heightForRowAtIndexPath返回浮動。

cellForRowAtIndexPath方法中,我出列我的手機從普通實現代碼如下所示:

ScheduleTableViewCell * cell = [self.scheduleTable dequeueReusableCellWithIdentifier:@"cell"]; 

我本來期望這對使用電池作爲我在故事板他們擺放好了,但是這顯然不包括這些限制。

是否有一些方法可以使這發生?或者我需要像AutoLayout之前那樣手動確定每行的高度?像某種骯髒的動物?

+0

您是否在故事板中爲常規表格和搜索結果表格使用了您創建的單元格? – rdelmar 2014-10-02 18:48:42

+0

是的,這就是我想要做的。 – 2014-10-02 18:52:37

+0

您是否使用iOS 8中引入的新自定義單元格(如將表格視圖的估計行高和rowHeight設置爲UITableViewAutomaticDimension)?如果是這樣,你是否已經爲兩個表做了這些? – rdelmar 2014-10-02 19:00:32

回答

3

當使用自調整單元格時,應將兩個表的rowHeight屬性設置爲UITableViewAutomaticDimension,併爲兩個表都設置estimatedRowHeight。你可以在viewDidLoad中做到這一點,不需要實現heightForRowAtIndexPath。

0

我掙扎了這個最近幾天也不幸rdelmar的回答並沒有解決這個問題對我來說,所以這裏是我必須做的來解決這個問題:

相反的:

self.searchDisplayController.searchResultsTableView.rowHeight = UITableViewAutomaticDimension; 

我不得不使用:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    return UITableViewAutomaticDimension; 
} 

這只是讓我走了一半。我在tableViewCell中的約束也存在一個潛在的問題。我的textView需要動態高度,所以我沒有爲textView提供任何高度限制。它根據它對上下視圖的約束來適當調整大小。這在我的原始tableView中效果很好,但在searchResultsTableView中並不如此。

我不得不將高度約束添加到textView並使用> =(大於或等於)常量。最後,searchResultsTableView模仿我的原始tableView。

+0

Frankie,我爲我的tableview設置了高度約束(> =就像你提到的那樣),但現在不是擴展,uilabel被切斷了...... – cableload 2015-10-08 03:04:07

1

根據@ rdelmar的回答我想補充。對於像我這樣感到困惑的人羣,您應該設置以下兩個屬性:

// for the main tableView 
self.tableView.rowHeight = UITableViewAutomaticDimension 
self.tableView.estimatedRowHeight = 100 //or whatever height you prefer 

// and for searchDisplayController 
self.searchDisplayController?.searchResultsTableView.rowHeight = UITableViewAutomaticDimension 
self.searchDisplayController?.searchResultsTableView.estimatedRowHeight = 100 //or whatever height you prefer 

P.S.對不起,我不能添加評論,所以我正在寫一個答案