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

Posted

技术标签:

【中文标题】激活和停用 UISearchController 时 UITableView 在位置之间跳转【英文标题】:UITableView jumps between positions when activating and deactivating UISearchController 【发布时间】:2018-03-04 17:32:46 【问题描述】:

我最近在表格视图中添加了一个 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 的默认行为。

【问题讨论】:

你的tableView是否在导航栏下方延伸? -edgesForExtendedLayout 和 -extendedLayoutIncludesOpaqueBars 有什么值? 【参考方案1】:

从视频中我相信表格视图没有延伸到导航栏下方。如果您真的允许这样做,您可能可以避免这种跳跃。

你也应该设置

tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic

使其 contentInsets 自动调整。

【讨论】:

这是默认值【参考方案2】:

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

希望它会起作用!

【讨论】:

不幸的是,我之前确实尝试过,它只是导致表格视图根本不随导航栏移动。【参考方案3】:

在尝试了UITableViewUIViewController 属性的各种组合后找到了解决方案。

我只需将Extends Edges Under Top Bars 设置为false,同时将UITableView 限制在安全区域的顶部。动画现在很流畅,并按照您的预期跟随UISearchController

【讨论】:

如何将“在顶栏下延伸边缘”设置为 false?

以上是关于激活和停用 UISearchController 时 UITableView 在位置之间跳转的主要内容,如果未能解决你的问题,请参考以下文章

使 UISearchController 搜索栏自动激活

在导航推送上激活没有动画的 UISearchController

激活和停用 textInput

iOS如何激活/停用某个尺寸类(方向)的布局约束?

仅在 WordPress 中激活和停用插件时运行 JS 文件

php 依赖插件激活/停用和警报