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

发布于 2024-12-07 23:08:26 字数 449 浏览 0 评论 0原文

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

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

tableViewTemp.tableHeaderView = searchBarFriends; 

我觉得很奇怪, 可能是什么问题?

请指教,谢谢。

I added UISearchBar as tableHeaderView for UITableView in xib, by just dropping UISearchBar onto UITableView.
It is working fine, when the table has more than 6 rows.
But when there is less than 6 rows, it UITableView does not scroll.

At the same time, if i add the UISearchBar as tableHeaderView for UITableView programatically in .m file using the following statement, EVERYTHING WORKS FINE.

tableViewTemp.tableHeaderView = searchBarFriends; 

Seems very strange to me,
What might be the problem?

Please advice, Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

柠檬心 2024-12-14 23:08:26

这是我做的一个小技巧;)不要让你的 SearchBar 成为你的 UITableView 的子视图。只需将它们的实例添加到 nib 文件中,并将它们作为 UITableViewController 中的 IBOutlet 连接起来。然后您要做的是将 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) 的高度< /strong>

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

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

Here is a little trick I did ;) Don't make your SearchBar a subview of your UITableView. Just add instances of them both in your nib file and wire them up as IBOutlets in your UITableViewController. Then what you are going to do is set the SearchBar as the header view for your table, that way you don't have to worry about the frames overlapping and interfering with touch events. Here's how you do it:

Create the property in your TableView header file

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

Set the header view for your table:

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

Set the height for your header or (UISearchBar)

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

That's all you need. Now this may not be the best solution if you have a grouped tableview or a table with multiple sections but its a clean solution for a simple table. Otherwise, you'd have to adjust the frame of the searchbar AND the tableview in code because they overlap and thats why you have touch issues. Hope this helps!

小ぇ时光︴ 2024-12-14 23:08:26

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

在此处输入图像描述

if you add search bar like below hierarchy it will work

enter image description here

合久必婚 2024-12-14 23:08:26

我遇到了几乎同样的问题(对我来说,它根本不会滚动任何行数,但一旦我删除搜索栏,它就会滚动)。修复了在 viewDidLoad 中添加以下内容:

self.tableView.alwaysBounceVertical = YES;

I had almost the same problem (for me it wouldn't scroll at all with any number of rows, but it would as soon as I removed the search bar). Fixed it adding this in viewDidLoad:

self.tableView.alwaysBounceVertical = YES;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文