iOS UISearchController 没有完全跨越

Posted

技术标签:

【中文标题】iOS UISearchController 没有完全跨越【英文标题】:iOS UISearchController doesn't span fully 【发布时间】:2018-06-04 20:24:45 【问题描述】:

在一些主要是 6s 的设备类型中,UISearchController 没有完全跨越。

    //Init search controller
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    UISearchBar *searchBar = self.searchController.searchBar;
    searchBar.frame = self.searchBarHolder.bounds;
    self.searchController.searchResultsUpdater = self;
    self.searchController.delegate= self;
    self.searchController.searchBar.delegate=self;
    self.searchController.dimsBackgroundDuringPresentation = NO;
    self.searchController.hidesNavigationBarDuringPresentation = NO;

    [self.searchBarHolder addSubview:searchBar];
    [self.searchBarHolder layoutIfNeeded];
    [searchBar sizeToFit];

searchBarHolder 在情节提要中设置,约束为trailing-0, top-0, leading-0, height - 45

这会产生以下结果:

一旦点击搜索栏,它就会出现becomeFirstResponder,然后,它就会正确显示。

我不知道为什么它一开始会这样显示。

这个UIViewController 嵌入在UINavigationCOntroller 中,并且它作为选项卡项之一嵌入在UITabBarController 中。

【问题讨论】:

“取消”按钮是否出现过? 是的,点击搜索栏时会出现。 【参考方案1】:

替换此行

searchBar.frame = self.searchBarHolder.bounds;

有了这个

CGRect rect = self.searchBarHolder.bounds;
rect.size.width = [UIScreen mainScreen].bounds.size.width;
searchBar.frame = rect

【讨论】:

以上是关于iOS UISearchController 没有完全跨越的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS8 中实现 UISearchController?

由于 UISearchDisplayController 在 iOS 8 中已弃用,如何创建 UISearchController?

在 UISearchController iOS 11 上使用背景图片

更新到 iOS 13 后 UISearchController UITextField 背景不显示白色

UISearchController 的大坑

iOS UISearchController:等到 UISearchController 在取消搜索后被解除