在 xib 中将 UISearchBar 添加为 tableHeaderView 不起作用

Posted

技术标签:

【中文标题】在 xib 中将 UISearchBar 添加为 tableHeaderView 不起作用【英文标题】:Adding UISearchBar as tableHeaderView in xib not works 【发布时间】:2011-10-01 07:54:22 【问题描述】:

我将UISearchBar 添加为xib 中UITableView 的tableHeaderView,只需将UISearchBar 放到UITableView 上。 当表格超过 6 行时,它工作正常。 但是当行数少于 6 时,UITableView 不会滚动。

同时,如果我使用以下语句在 .m 文件中以编程方式将 UISearchBar 添加为 UITableView 的 tableHeaderView,一切正常。

tableViewTemp.tableHeaderView = searchBarFriends; 

对我来说似乎很奇怪, 可能是什么问题?

请指教,谢谢。

【问题讨论】:

【参考方案1】:

这是我做的一个小技巧 ;) 不要让 SearchBar 成为 UITableView 的子视图。只需在您的 nib 文件中添加它们的实例,并将它们作为 IBOutlets 连接到您的 UITableViewController 中。然后您要做的是将 SearchBar 设置为表格的标题视图,这样您就不必担心帧重叠和干扰触摸事件。以下是你的做法:

在 TableView 头文件中创建属性

@property ( nonatomic, retain ) IBOutlet UISearchBar *searchBar;

为您的表格设置标题视图:

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
    return self.searchBar;  // The property you wired up in IB

设置标题或 (UISearchBar) 的高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
    return 44; // The height of the search bar

这就是你所需要的。现在,如果您有一个分组的 tableview 或一个包含多个部分的表格,这可能不是最好的解决方案,但它对于一个简单的表格来说是一个干净的解决方案。否则,您必须在代码中调整搜索栏和表格视图的框架,因为它们重叠,这就是您遇到触摸问题的原因。希望这会有所帮助!

【讨论】:

谢谢你,杰瑞,我会试试的。 我在我的应用程序中使用过它,应该像一个魅力一样工作。如果确实如此,请将其标记为已接受;)【参考方案2】:

如果您添加如下层次结构的搜索栏,它将起作用

【讨论】:

我只添加了这样的好友,但是当少于 6 条记录时,它使 UITableView 无法滚动。 好的,谢谢 Narayana,所以可能是其他问题。我会检查我的代码。【参考方案3】:

我遇到了几乎相同的问题(对我来说,它根本不会滚动任何数量的行,但只要我删除了搜索栏,它就会滚动)。修复它在viewDidLoad 中添加这个:

self.tableView.alwaysBounceVertical = YES;

【讨论】:

谢谢 pt2ph8,我也试试这个。

以上是关于在 xib 中将 UISearchBar 添加为 tableHeaderView 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将内容包装为自定义视图

在 iOS7 中将搜索栏与导航栏结合时 UISearchbar 空间为空?

UISearchbar 占位符错位

如何将 UISearchBar 添加到同一 UIViewController 中的两个 TableView

UISearchBar上方的UITableView背景颜色[重复]

在 iOS 的工具栏中包含 UISearchBar