【发布时间】:2010-04-14 17:51:38
【问题描述】:
我在 Interface Builder 中将我的 UITableView 行高设置为 54.0。我在那个观点上有一个UISearchDisplayController。当用户点击其中的搜索栏时,表格会正确调整大小。但是,当他们开始输入(并实际进行搜索)时,行高会减小。在搜索点击 Cancel 之前,它一直是错误的。
我在 Apple 的网站上找不到有关此行为的文档。
我尝试在UISearchDisplayDelegate 委托调用中设置行高。这可能是正确的方法,但我不知道细节,无法让它发挥作用。
我也尝试过实现- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;。这行得通,但我在此列表中有 数千 个条目,无法承受性能损失。
解决这个问题的正确方法是什么?
【问题讨论】:
-
我鼓励大家看看下面 steven 的回答。他的唯一答案是 a) 遵循
UITableViewDataSource协议,将UISearchTableView视为任何其他表,并且 b) 支持多个行的高度。如果您具有显示自定义“无搜索结果”单元格的标准功能,该单元格通常会调整大小以占用整个 tableView 框架,则 B 非常重要。 -
我怀疑这是真的。我发现在这种情况下实现
heightForRowAtIndexPath对我有用,这对我的表(有数万行)来说很慢。确保您没有仅针对某些tableView参数返回可变高度,您应该没问题。 -
heightForRowAtIndexPath永远不会对tableView的性能产生重大影响。无论你有 10 行还是 10,000 行,tableView 只处理当前可见的行。因此,除非您花费大量时间来确定行高应该是多少,否则您的 tableView 应该能够在滚动时保持 60fps 的动画。 -
这不是真的。根据 Apple 的文档:“每次显示表视图时,它都会在其每一行的委托上调用 tableView:heightForRowAtIndexPath:,这可能会导致具有大量行(大约 1000 或更多)的表视图出现严重的性能问题)。”
标签: iphone uitableview uisearchdisplaycontroller