聚焦时如何调整 UISearchController.searchBar 的大小问题?
Posted
技术标签:
【中文标题】聚焦时如何调整 UISearchController.searchBar 的大小问题?【英文标题】:How to resizing issue of UISearchController.searchBar when focused? 【发布时间】:2019-04-16 09:34:48 【问题描述】:我们很久以前就为 ios 5 开发了一个应用程序,我们在 storyboard
上使用了“搜索栏和搜索显示控制器”对象。由于iOS8
UISearchDisplayController
是deprecated
,我正在尝试使用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 的大小问题?的主要内容,如果未能解决你的问题,请参考以下文章