【问题标题】:UISearchBar Overlays UITableView - TableView Can't be movedUISearchBar Overlays UITableView - TableView 无法移动
【发布时间】:2014-06-27 10:05:28
【问题描述】:

我已经设置了一个 TableView 和一个搜索栏,到目前为止都可以正常工作。问题是 UISearchBar 覆盖了我的 TableView 的第一项。

我不能在这个项目中使用 XIB 或故事板。

TableView 的定义和实例化在一个类(由我导入的类导入...)的星系中很远很远——不是那么容易访问。

我在屏幕上移动(实例化)搜索栏:

self.searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];
[self.view addSubview:self.searchBar];
self.searchBar.delegate = self;

我尝试将其移至 0,-44,但随后屏幕并未停留在 SearchBar,而是向下移动。

如果我尝试使用以下方式移动 UITableView:

self.tableView.frame = CGRectMake(0, 0, 320, 500);

它也会移动 SearchBar。

假设我将搜索栏的原点设置为 0,0,将表格视图的原点设置为 0,44,我会得到一个屏幕(对象按此顺序):

  • 带有搜索栏/表格视图单元格高度的灰色空间
  • 搜索栏(仍然覆盖我的表格视图的第一个单元格
  • 其他单元格

我该如何解决这个问题?我认为最简单的方法是在我的数据数组中添加一个空对象,这样搜索栏就不会覆盖任何重要内容,但这不是解决问题的最佳方法。

谁能告诉我如何将一个对象添加/插入到一个数组中,然后将另一个数组复制到其中,从索引 1 开始,这样我的空对象就保留在那里?

【问题讨论】:

    标签: ios arrays uitableview uisearchbar


    【解决方案1】:

    您可以在 tableView 上使用 contentInset 属性。只需将顶部插图设置为搜索栏的高度即可。

    self.tableView.contentInset = UIEdgeInsetsMake(self.searchBar.frame.size.height, 0, 0, 0);
    

    这应该可以解决问题。

    【讨论】:

    • 哇非常好的解决方案,谢谢!你能告诉我如何让屏幕从 0,0,0,0 开始,所以如果你想搜索,你必须向上滚动?例如,当您想搜索歌曲时,就像在 iPhone 音乐应用程序中一样;)
    • 您可以将搜索栏设置为tableHeaderView。如果您想让它最初隐藏,那么您需要稍微调整 tableView 的 contentOffset 。这将立即起作用,但与音乐中的不完全一样。要实现这一点,您需要实现 scrollViewDelegate 方法并检测是否显示搜索栏或隐藏它(如果 tableView 的 contentOffset 小于 searchBar.frame.size.height * 0.5f 比显示它,否则隐藏它) .
    • 好的,谢谢你的方法,我会努力让它工作;)!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多