iOS 11:UISearchController 在 UITableView 和 UISearchBar 之间有一个奇怪的空间

Posted

技术标签:

【中文标题】iOS 11:UISearchController 在 UITableView 和 UISearchBar 之间有一个奇怪的空间【英文标题】:iOS 11: UISearchController has a strange space in between UITableView and UISearchBar 【发布时间】:2018-05-02 20:16:31 【问题描述】:

我有以下代码来设置我的UISearchController

- (void)viewDidLoad 
    [super viewDidLoad];
    // Arrays init & sorting.
    self.cities = [@[@"Boston", @"New York", @"Oregon", @"Tampa", @"Los Angeles", @"Dallas", @"Miami", @"Olympia", @"Montgomery", @"Washington", @"Orlando", @"Detroit"] sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) 
        return [obj2 localizedCaseInsensitiveCompare:obj1] == NSOrderedAscending;
    ];

    self.results = [[NSMutableArray alloc] init];

    // A table view for results.
    UITableView *searchResultsTableView = [[UITableView alloc] initWithFrame:self.tableView.frame];
    searchResultsTableView.dataSource = self;
    searchResultsTableView.delegate = self;

    // Registration of reuse identifiers.
    [searchResultsTableView registerClass:UITableViewCell.class forCellReuseIdentifier:Identifier];
    [self.tableView registerClass:UITableViewCell.class forCellReuseIdentifier:Identifier];

    // Init a search results UITableViewController and setting its UITableView.
    self.searchResultsTableViewController = [[UITableViewController alloc] init];
    self.searchResultsTableViewController.tableView = searchResultsTableView;

    // Init a UISearchController with its UITableViewController for results.
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsTableViewController];
    self.searchController.searchResultsUpdater = self;
    self.searchController.delegate = self;

    // Make an appropriate size for UISearchBar and add it as a header view for initial UITableView.
    [self.searchController.searchBar sizeToFit];
    self.tableView.tableHeaderView = self.searchController.searchBar;

    // Enable presentation context.
    self.definesPresentationContext = YES;

这很好用,除了在 ios 11 上。似乎有两个问题。首先是当我搜索时,表格栏和搜索栏之间存在间隙。

另一个问题是当我退出UISearchController 时,tableView 中的第一个单元格被搜索栏略微截断。

有没有办法解决这个问题?

【问题讨论】:

您的第一个问题将通过以下方式解决:self.automaticallyAdjustsScrollViewInsets = NO; 对我不起作用。 【参考方案1】:

对您的 tableview 进行正确的自动布局。 删除所有约束并执行此操作,记住您的垂直空间约束应为 0。

谢谢。

【讨论】:

以上是关于iOS 11:UISearchController 在 UITableView 和 UISearchBar 之间有一个奇怪的空间的主要内容,如果未能解决你的问题,请参考以下文章

iOS 11 上 UITableView 中的 UISearchController 问题

检测 UISearchController 何时出现在 iOS 11 的导航项中

在 UISearchController iOS 11 上使用背景图片

iOS 11:UISearchController 在 UITableView 和 UISearchBar 之间有一个奇怪的空间

NavigationItem iOS 11 Apple 方式中的 UISearchController

在 iOS 11 上以编程方式滚动 UISearchController 的搜索栏不会消失