我最近在表视图中添加了一个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中的默认行为。
答案 0 :(得分:4)
从视频中我相信表格视图不会在导航栏下方延伸。如果你真的允许它,你可以避免跳跃。
您还应该设置
tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic
这样它的contentInsets会自动调整。
答案 1 :(得分:4)
我认为,对安全区域有顶级约束的问题。 SearchController在更新导航栏位置时无法更新tableview框架。因此,如果您可以将tableview的顶部约束设置为superview,则动画可以是平滑的。设置tableview约束如下:
希望它会起作用!
答案 2 :(得分:2)
尝试UITableView
和UIViewController
属性的各种组合后找到解决方案。
我只需将Extends Edges Under Top Bars
设置为false,同时将UITableView
限制在安全区域的顶部。动画现在很流畅,并按照您的预期跟随UISearchController
。