聚焦时如何调整 UISearchController.searchBar 的大小问题?

Posted

技术标签:

【中文标题】聚焦时如何调整 UISearchController.searchBar 的大小问题?【英文标题】:How to resizing issue of UISearchController.searchBar when focused? 【发布时间】:2019-04-16 09:34:48 【问题描述】:

我们很久以前就为 ios 5 开发了一个应用程序,我们在 storyboard 上使用了“搜索栏和搜索显示控制器”对象。由于iOS8 UISearchDisplayControllerdeprecated,我正在尝试使用UISearchController 删除现有的“搜索栏和搜索显示控制器”。

由于UISearchController 在界面上的“对象库”中不可用,我已使用以下代码以编程方式将其添加到interface 上的UIView

//Set up Search Controller
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = (id)self;
self.searchController.dimsBackgroundDuringPresentation = YES;
self.searchController.searchBar.delegate = self;

//Adding as subview to UIView 'searchBarContainer'
[self.searchBarContainer addSubview:self.searchController.searchBar];
[self.searchBarContainer bringSubviewToFront:self.searchController.searchBar];

self.definesPresentationContext = YES;
self.extendedLayoutIncludesOpaqueBars = YES;

并设置'searchController'的frame等于UIView如下:

UISearchBar *ctrlSearchBar = self.searchController.searchBar;
ctrlSearchBar.frame = CGRectMake(0, 0, self.searchBarContainer.frame.size.width, self.searchBarContainer.frame.size.height);

searchBar 的大小很好,但是当它专注于点击它时,'searchBar' 的宽度会自动增加。

我什至尝试使用 NSLayoutConstraints 但没有解决问题。 任何人都可以帮助如何修复“UISearchController.searchBar”的大小,即使它是集中的?

【问题讨论】:

您有UITableView 的结果吗?如果是 - 您可以将搜索控制器设置为 tableHeaderView 吗?另一种选择是直接使用UISearchBar 而不使用UISearchController @surToTheW 即使将 UISearchController 设置为 tableHeaderView,我在聚焦时也遇到了与搜索栏相同的大小问题。搜索栏的宽度超过了设备宽度。关于直接使用 UISearchBar,我认为我们可以使用的唯一委托是 textDidChange。 textDidChange 是否更可取,而不是使用 UISearchController 的“updateSearchResults”委托?我不知道,但许多开发人员建议仅在需要将 UISearchBar 与 UITableView 一起使用时才使用 UISearchController。 我试过了,当表格视图的宽度小于屏幕的宽度时,搜索栏的行为很奇怪 - 超过表格视图的宽度或有时向上移动,但留在视图控制器中尺寸。所以我为当前的一个子视图控制器制作了一个子视图控制器,将其宽度设置为小于屏幕尺寸,并在那里添加了表格视图和搜索控制器。如果这是您的选择,您必须设置 self.definesPresentationContext = YES; 并且搜索栏也设置为 tableHeaderView,如下所示:self.tableView.tableHeaderView = self.searchController.searchBar; @surToTheW 太棒了!这可能是解决方案。我会检查并回复你。 @surToTheW 工作就像一个魅力!非常感谢你!我不知道如何将您的回复标记为答案。但我相信这是正确的答案。 【参考方案1】:

正如surToTheW 在他的评论中建议的那样,我创建了一个自定义的 UIViewController,其中包含 UISearchController。我将它作为子视图控制器添加到我的主 UIViewController 中,并且搜索栏没有超过自定义 UIViewController 的视图宽度。

【讨论】:

【参考方案2】:

在 UISplitViewController 的主列中的 searchBar 上下文中,searchBar 文本字段的宽度大约是该列的两倍。在输入大约 10 个字符之前,用户输入是不可见的。 使用 iOS10 安装 searchBar 的方法可以避免该问题。 使用iOS10及更早版本安装搜索器的方法如下

tableView.tableHeaderView = searchController.searchBar

这是“新”iOS 11 及更高版本的方法,似乎主列太宽,进而导致 searchText 字段太大。

navigationItem.searchController = searchController

您可以使用 Apple 示例应用程序“使用搜索控制器显示可搜索内容”并查看 MainTableViewController.viewDidLoad() 以了解这两种方法的示例。 将 UISplitViewController 添加到示例应用以查看宽度问题。

已提交有关此问题的反馈助手报告 - 请参阅 FB9515194

iPadOS 14.7.1。 iPad 横向显示 UISplitViewController 的主要和次要列。

【讨论】:

以上是关于聚焦时如何调整 UISearchController.searchBar 的大小问题?的主要内容,如果未能解决你的问题,请参考以下文章

液晶电视机聚焦不好调哪项

华为手机拍照无法聚焦

聚焦时如何更改边框宽度

聚焦时如何隐藏edittext的线条颜色

应用程序窗口未聚焦时如何在 UWP 中更改\控制鼠标位置?

聚焦时如何从单选框中删除蓝色轮廓?