UISearchDisplayController更改行高

Ste*_*her 25 iphone uitableview uisearchdisplaycontroller

我已将UITableView行高在Interface Builder中设置为54.0.我有一个UISearchDisplayController观点.当用户点击其中的搜索栏时,表格会正确调整大小.但是,当他们开始键入(并且实际进行搜索)时,行高度会降低.在搜索点击取消之前,它会出错.

我在Apple的网站上找不到关于此行为的文档.

我已尝试在UISearchDisplayDelegate委托调用中设置行高.这可能是正确的方法,但我不知道细节,也无法使其发挥作用.

我也尝试过实施- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;.这很有效,但是我在这个列表中有数以千计的条目,并且无法获得性能.

解决这个问题的正确方法是什么?

Chr*_*ers 56

执行此操作的正确方法是使用以下委托.

- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView
{
    tableView.rowHeight = 54.0f; // or some other height
}
Run Code Online (Sandbox Code Playgroud)

UITableView创建或显示时调用它.

如果您searchDisplayController.searchResultsTableView在未执行搜索时碰巧使用其他代码,则会提前创建UITableView.如果使用willShow委托方法设置rowHeight,如果事先创建了tableView,它将错过更改rowHeight的时间(由于某种原因).


Ste*_*her 16

我找到了!

假设表存储在tableView:

- (void)viewDidLoad;
{
    [super viewDidLoad];
    self.searchDisplayController.searchResultsTableView.rowHeight = tableView.rowHeight;
}
Run Code Online (Sandbox Code Playgroud)

没有必要.

编辑:请参阅netmikey的答案以获得更好的解决方案.


net*_*key 10

史蒂夫,你的解决方案对我不起作用:第一次搜索结果显示正常,但是当用户点击"取消"(关闭搜索栏)然后重新打开它并在其中输入搜索词时,高度再次出错.

DigDog的使用解决方案searchDisplayController:didShowSearchResultsTableView有点工作,但用户在搜索开始时看到了单元格高度"跳跃".

我发现解决这两个问题的解决方案是使用:

- (void)searchDisplayController: (UISearchDisplayController *)controller 
 willShowSearchResultsTableView: (UITableView *)searchTableView {

    searchTableView.rowHeight = myTableView.rowHeight;
}
Run Code Online (Sandbox Code Playgroud)

......在UISearchDisplayDelegate.

问候,netmikey