gpt4 book ai didi

ios - 展开以查看搜索结果 Controller 事件在顶部留下黑色间隙

转载 作者:行者123 更新时间:2023-11-29 10:27:46 25 4
gpt4 key购买 nike

我有多个 View Controller ,它们都使用一个类(我们称之为 searchClass <NSObject> )我写的有一个 UISearchController用于搜索外部 API。用户可以点击搜索图标,搜索 Controller 变为事件状态:[_searchClass.searchController setActive:YES];它使用自己的 TableView Controller (不是每个 View Controller 中的那个,因为它们不都是 TableView Controller )。

在我的例子中,我让搜索栏出现在导航栏中。搜索效果很好,用户可以选择一个搜索结果并点击它以查看详细信息。 问题 是当用户从详细信息 View 返回(展开)到搜索结果时,在表格 View 上方和导航栏下方会短暂出现一个大约 44 磅高的黑色间隙,并且然后消失。

这是我的设置。在 View Controller 中:

    self.definesPresentationContext = YES;
_searchClass = [SearchClass new];
_searchClass.navController = [self navigationController];

在搜索类中:

    _searchTableViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"searchTableViewController"];
_searchTableViewController.tableView.delegate = self;
_searchTableViewController.tableView.dataSource = self;
_searchTableViewController.tableView.backgroundColor = [UIColor clearColor];
_searchTableViewController.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
_searchTableViewController.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectZero];
_searchTableViewController.definesPresentationContext = YES;

_searchController = [[UISearchController alloc] initWithSearchResultsController:_searchTableViewController];
_searchController.delegate = self;
_searchController.hidesNavigationBarDuringPresentation = NO;

_searchController.searchBar.delegate = self;
_searchController.searchBar.searchBarStyle = UISearchBarStyleMinimal;
_searchController.searchBar.showsCancelButton = YES;
_searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);

对于 UISearchBar 还有常用的委托(delegate)方法和 UISearchController ,以及显示搜索栏的代码,它使用动画替换了导航栏的 titleView。

返回搜索结果后,我该如何消除这种差距?

最佳答案

我找到了解决方案,它与 UINavigationBar 有关。出于某种原因,将半透明属性设置为 NO 似乎导致了此问题。

self.navigationBar.translucent = YES;

将其设置为 YES(或省略该行,因为它是默认设置)使其正常工作。因为我仍然想让导航栏不透明,所以我做了以下操作使导航栏仅在过渡期间半透明,这似乎是问题所在:

- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.navigationController.navigationBar.translucent = YES;
}

-(void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.navigationController.navigationBar.translucent = NO;
}

对我来说绝对像是一个真正的 iOS 错误。

关于ios - 展开以查看搜索结果 Controller 事件在顶部留下黑色间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31308766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com