小编Mic*_*rke的帖子

在iOS11中的tableHeaderView中使用UISearchController和UISearchBar

有没有人成功地保留了UISearchBartableHeaderView一个UITableView在ios11?iPhone X在景观中通常会出现问题:

在此输入图像描述

Apple建议使用新searchController属性:

if (@available(iOS 11.0, *)) {
    self.navigationItem.searchController = self.searchController;
    self.navigationItem.hidesSearchBarWhenScrolling = NO;
} else {
    self.tableView.tableHeaderView = self.searchController.searchBar;
}
Run Code Online (Sandbox Code Playgroud)

然而,这并不总是有效.这是一个代码示例:

嵌入UISplitViewController时,UINavigationBar中缺少iOS11 UISearchBar

所以,试图保持searchBartableHeaderView-切实可行的第一步是应用适当的自动布局限制:

if (@available(iOS 11.0, *)) {
    UILayoutGuide *guide = self.tableView.safeAreaLayoutGuide;
    searchBar.translatesAutoresizingMaskIntoConstraints = NO;
    [searchBar.leftAnchor constraintEqualToAnchor:guide.leftAnchor].active = YES;
    [searchBar.rightAnchor constraintEqualToAnchor:guide.rightAnchor].active = YES;
}
Run Code Online (Sandbox Code Playgroud)

searchBar显示时,那么正确的尺寸:

在此输入图像描述

但是,UISearchBar激活时会出现问题:

在此输入图像描述

这似乎是一个老问题.有许多stackoverflow问题和答案与这样的问题有关.在这种情况下,在检查视图层次结构时,似乎设置的宽度UISearchBar不正确.所以这可以纠正:

- (void)didPresentSearchController:(UISearchController *)searchController NS_AVAILABLE_IOS(11_0)
{
    if (@available(iOS 11.0, *)) {
        CGRect frame = …
Run Code Online (Sandbox Code Playgroud)

uitableview uisearchbar ios uisearchcontroller ios11

6
推荐指数
0
解决办法
1729
查看次数