UISearchDisplayController使用AutoLayout约束表格单元格渲染

时间:2014-10-02 18:02:34

标签: ios autolayout uisearchdisplaycontroller

我正在iOS 7&中实现一个UISearchDisplayController。 8个应用程序我正在使用Storyboard来构建界面,并且我已经成功地将搜索控制器添加到我的表中,并且所有内容都很好,以便搜索工作正常。

我的问题是已使用“自动布局”配置表格行,以根据单元格的内容提供动态行高。虽然常规表中的布局很好,但这些约束不会应用于搜索结果表中。这是一些漂亮的图片来展示我的意思。

Left: Normal table view; Right: Search Results table

每个教程和一些文档都假设结果表具有静态高度,建议是使用tableview.rowHeight或从tableView:heightForRowAtIndexPath返回一个浮点数。

在cellForRowAtIndexPath方法中,我将我的单元格从常规表视图中出列,如下所示:

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

我原本以为我会在故事板中使用单元格,但显然不包括约束。

我能采取一些方法来实现这一目标吗?或者我是否需要手动确定每行的高度,就像我在AutoLayout之前做的那样?像某种肮脏的动物?

3 个答案:

答案 0 :(得分:3)

使用自调整单元格时,应将两个表的rowHeight属性设置为UITableViewAutomaticDimension,并为两个表设置estimatedRowHeight。你可以在viewDidLoad中执行此操作,不需要实现heightForRowAtIndexPath。

答案 1 :(得分: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。抱歉,我无法添加评论,因此我正在撰写答案

答案 2 :(得分:0)

我在过去的几天里也为此苦苦挣扎,不幸的是rdelmar的回答并没有为我解决问题,所以这就是我必须要解决的问题:

而不是:

self.searchDisplayController.searchResultsTableView.rowHeight = UITableViewAutomaticDimension;

我不得不使用:

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

    return UITableViewAutomaticDimension;
}

这只让我走了一半。 tableViewCell中的约束也存在潜在问题。我的textView需要动态高度,所以我没有为textView提供任何高度约束。它根据它对上下视图的约束适当调整大小。这在我原来的tableView中运行得很好,但在searchResultsTableView中却不是这样。

我必须将高度约束添加到textView并使用> =(大于或等于)常量。最后,searchResultsTableView模仿我原来的tableView。