ios – UISearchController searchBar在第一次点击时消失

前端之家收集整理的这篇文章主要介绍了ios – UISearchController searchBar在第一次点击时消失前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在TableView中实现了一个UISearchController,由一个导航控制器推送.

首先我的问题是每当我点击SearchBar时,它就会消失.当我输入一些文本时,它可以工作,但它保持完全空白.然后我设法使用此代码解决问题:

- (void)searchForText:(NSString*)searchText
{
    [self.view addSubview:villeSearchController.searchBar];
}

哪个半工作因为现在,当我点击搜索栏时,它会消隐,但是如果我输入一个字符,它会再次出现,然后它就会停留在那里,无论如何.直到我取消搜索,然后再次点击它,在这种情况下它会消隐.
我做了一些测试,这个方法(searchForText)在第一次点击时被调用,所以这不是原因.

有谁知道我如何解决这个问题并让搜索栏从第一次点击出现?

编辑:

这是我初始化SearchController的方法

villeSearchController = [[UISearchController alloc]   initWithSearchResultsController:nil];
villeSearchController.searchResultsUpdater = self;
villeSearchController.dimsBackgroundDuringPresentation = NO;
villeSearchController.searchBar.delegate = self;
villeTableView.tableHeaderView = villeSearchController.searchBar;
villeSearchController.searchBar.scopeButtonTitles = @[];
self.definesPresentationContext = YES;
[villeSearchController.searchBar sizeToFit];

解决方法

尝试检查navigationBar.translucent属性 – 当UISearchController将呈现searchBar时它应该是YES,否则将是UI错误.

来自@SiavA的更新

更好的解决方案是使用UIViewController的extendedLayoutIncludesOpaqueBars属性.如果您使用不透明导航栏,只需将其设置为true,即控制器将显示UISearchController(不适用于navigationController).

例如.

- (void)viewDidLoad {
    [super viewDidLoad];

    self.extendedLayoutIncludesOpaqueBars = !self.navigationController.navigationBar.translucent;
}

猜你在找的iOS相关文章