代码之家  ›  专栏  ›  技术社区  ›  A. Walker

激活和停用UISearchController时,UITableView在位置之间跳转

  •  7
  • A. Walker  · 技术社区  · 8 年前

    我最近在我的表视图中添加了一个UISearchController,我遇到了一个动画问题。当点击搜索栏并激活时,表格视图会跳起来以满足搜索控制器的新(激活)位置。问题是,搜索控制器会设置到这个新位置的动画,但表视图不会这样做,因此非常刺耳。 Here is a video 问题的关键。

    表视图上的顶部约束设置为视图控制器的安全区域。以下是我为配置搜索控制器编写的代码:

    - (void)configureSearchController {
        UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
        searchController.searchResultsUpdater = self;
        searchController.obscuresBackgroundDuringPresentation = NO;
        searchController.searchBar.placeholder = @"Search for any cryptocurrency";
        self.searchController = searchController;
        if (@available(iOS 11.0, *)) {
            self.navigationItem.searchController = searchController;
        } else {
            self.navigationItem.titleView = searchController.searchBar;
        }
        self.definesPresentationContext = YES;
    }
    

    有人对我如何顺利过渡有什么建议吗?理想情况下,我希望表视图以与搜索控制器相同的速度向上移动,因为这是整个iOS的默认行为。

    3 回复  |  直到 8 年前
        1
  •  6
  •   pfandrade    8 年前

    从视频中,我相信表格视图没有延伸到导航栏下方。如果你真的允许跳转,你可能会避免跳转。

    还应设置

    tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic

    以便自动调整其内容插入。

        2
  •  5
  •   Shamim Hossain    8 年前

    我认为,安全区域的顶部约束问题。SearchController在更新其导航栏位置时无法更新tableview框架。因此,如果可以将tableview的顶部约束设置为superview,动画可能会很平滑。按以下方式设置tableview约束:

    enter image description here

    希望它能起作用!

        3
  •  4
  •   A. Walker    8 年前

    尝试各种组合后找到解决方案 UITableView 和 UIViewController 属性。

    我只需要设置 Extends Edges Under Top Bars 在保留 UITableView 约束到安全区域的顶部。动画现在是平滑的,并遵循 UISearchController 正如你所料。