UISearchController错误的动画,向后滑动,然后消失

Eph*_*Bee 7 iphone xcode navigationbar ios searchbar

为了简短起见,我有一个隐藏了导航栏的主视图控制器,从该VC的导航控制器中,我推了另一个具有导航栏可见的视图控制器。然后,当我向下滚动时,将searchController添加到navigationItem中以添加searchBar。一切正常,直到您向后滑动以弹出VC。

导航栏将使动画与VC一起离开屏幕,但是searchBar会进行动画,好像它就位。更糟糕的是,如果我取消滑动弹出按钮,整个searchBar消失了,而是出现了一个黑色视图(我认为无论背景如何,都可以使用searchController背景)。

我尝试了所有内容,虽然只有几行代码,但我一直在努力解决。我知道我可以禁用滑动弹出功能,但是我不希望这样做(即使按相同的怪异方式按下searchBar动画也是如此),并且我也不想以任何其他方式添加searchBar。

在所附的视频中,我只是用手指轻扫以显示动画。

描述

- (void)viewDidLoad {
    [super viewDidLoad];
    self.definesPresentationContext = YES;
    [self.navigationController setNavigationBarHidden:NO];

    if (@available(iOS 11.0, *)) {
        self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
        _searchController.delegate = self;
        _searchController.searchResultsUpdater = self;
        _searchController.searchBar.placeholder = @"Search";
        self.navigationItem.searchController = _searchController;
        self.navigationItem.hidesSearchBarWhenScrolling = YES;
    }
}
Run Code Online (Sandbox Code Playgroud)

Nir*_*att 0

我认为添加额外的东西UISearchController是一种矫枉过正的行为。您始终可以UISearchbar通过情节提要或代码将独立添加到视图控制器,并使搜索栏托管视图控制器作为该搜索栏的委托。

像这样的东西:

    self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 0, NAVBAR_HEIGHT)];   
    self.searchBar.delegate = self;
    self.view.addSubView(self.searchBar);
Run Code Online (Sandbox Code Playgroud)

这样,导航项与搜索栏的耦合就会消失,希望问题能够得到解决。