【问题标题】:(iPhone/iOS) UISearchBar Scope Buttons cover first row of UITableView(iPhone/iOS) UISearchBar Scope Buttons 覆盖 UITableView 的第一行
【发布时间】:2011-11-07 18:23:29
【问题描述】:

我知道以前有人问过这个问题,但我还没有找到真正的解决方案。我有一个UITableView 和一个UISearchBar 作为它的tableHeaderView. 每当出现范围按钮时,它们都会覆盖UITableView 的第一行。

我曾尝试使用UITableView.contentOffsetUITableView 偏移范围按钮的高度,这一直有效,直到用户点击UITableView 或滚动它,此时UITableView 跳回其原始偏移量。

我能做的最好的事情是将UISearchBar 设置为视图中的单独项目,并在用户点击搜索按钮时动态调整UITableView 的大小以显示或隐藏它。唯一的问题是没有动画,所以过渡很尖锐。

更新:我通过实现UISearchDisplayController 解决了这个问题,因为这是最干净、最容易使用的解决方案。 UISearchDisplayController 自动显示/隐藏范围按钮并相应地向下移动UITableView。起初我没有这样做,因为我希望UITableView 保持可见而不是最初被UISearchDisplayController 遮住,但是我开始意识到停电不会妨碍任何功能;如果用户想继续查看 UITableView 的原样,他就不会发起搜索。

【问题讨论】:

    标签: iphone uitableview button scope uisearchbar


    【解决方案1】:

    想法:

    • tableHeaderView 设置为以UISearchBar 作为其子视图的UIView,并在出现范围按钮时调整UIView 的大小。 UITableView 有望响应该视图更改其框架。

    • UISearchBar 设置为UITableView 的第一个单元格的内容,并在范围按钮隐藏或显示时使用(void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation。返回适当的高度以使单元格动画到其新高度。

    或者您可以使用您描述的方法(UISearchBar 作为视图中的单独项目),并使用动画块为过渡设置动画,使其不那么锐利。

    [UIView animateWithDuration:1.0 animations:^
      {
         //change table view frame here
      }];
    

    【讨论】:

      【解决方案2】:

      如果您根据搜索控制器是否处于活动状态来调整标题的单元格高度,则一切正常

      func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
      
          var headerHeight: CGFloat = 0.0
      
          if searchController.isActive
          {
              headerHeight = searchController.searchBar.frame.size.height
          }
      
          return headerHeight
      }
      

      【讨论】:

        猜你喜欢
        • 2011-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多