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

A. *_*ker 6 objective-c uitableview uikit ios uisearchcontroller

我最近在我的表视图中添加了一个UISearchController,我遇到了动画问题.当点击搜索栏并变为活动状态时,表格视图会跳起以满足搜索控制器的新(活动)位置.这个问题是搜索控制器动画到这个新位置,但表视图不是这样,它是非常刺耳的.这是该问题的视频.

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

- (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;
}
Run Code Online (Sandbox Code Playgroud)

有没有人对如何使转换顺利进行有任何建议?理想情况下,我希望表视图以与搜索控制器相同的速率向上移动,因为这是整个iOS中的默认行为.

pfa*_*ade 5

从视频中,我相信表格视图不会在导航栏下方扩展。如果您确实允许这样做,则可以避免这种跳跃。

您还应该设置

tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic

使它的contentInsets自动调​​整。


Sha*_*ain 5

我认为,安全区域的最高约束问题。SearchController 在更新其导航栏位置时无法更新表格视图框架。因此,如果您可以将 tableview 的顶部约束设置为 superview,动画就会很流畅。设置您的表格视图约束如下:

在此输入图像描述

希望它会起作用!


A. *_*ker 4

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

我只需将其设置Extends Edges Under Top Bars为 false,同时将UITableView约束保持在安全区域的顶部。动画现在很流畅并且符合UISearchController您的预期。

  • 如何将“在顶部栏下方延伸边缘”设置为 false? (2认同)