搜索栏与iOS 11上的状态栏重叠

时间:2017-09-19 08:41:24

标签: cocoa-touch uisearchbar ios11

我正在使用UISearchController和UISearchResultsController来实现搜索功能。

MySearchResultsController实现UISearchResultsUpdating和UISearchBarDelegate:

override open func viewDidLoad() {
    super.viewDidLoad()
    self.edgesForExtendedLayout = [];
    self.automaticallyAdjustsScrollViewInsets = false;
}

我在myTableViewController中的tableHeader中显示搜索栏:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController];
    self.searchController.searchResultsUpdater = self.searchResultsController;
    self.searchController.searchBar.delegate = self.searchResultsController;
    self.searchController.searchBar.scopeButtonTitles = @[NSLocalizedString(@"SEARCH_SCOPE_TEMPERATURES", nil), NSLocalizedString(@"SEARCH_SCOPE_KNOWHOW", nil)];
    self.tableView.tableHeaderView = self.searchController.searchBar;
    self.definesPresentationContext = YES;
}

之前效果很好,但是在iOS 11下,一旦我点击它,搜索栏就会与状态栏重叠(见截图)。我尝试了很多不同的东西来让它正确显示但尚未找到解决方案。

enter image description here

3 个答案:

答案 0 :(得分:3)

我发现问题是呈现视图控制器也设置了

override open func viewDidLoad() {
    super.viewDidLoad()
    self.edgesForExtendedLayout = [];
    self.automaticallyAdjustsScrollViewInsets = false;
}

我必须这样做,因为表视图实际上并没有一直延伸到顶部。

我在演示视图控制器中解决了这个问题:

override open func viewDidLoad() {
    super.viewDidLoad()
    self.automaticallyAdjustsScrollViewInsets = false;
    if (@available(iOS 11.0, *)) {
        //NSLog(@"iOS 11.0");
    } else {
        self.edgesForExtendedLayout = UIRectEdgeNone;
        //NSLog(@"iOS < 11.0");
    }
}

似乎是iOS 11的错误,或者至少是一种奇怪的行为......

答案 1 :(得分:1)

这就是我的工作:

selected="selected"

答案 2 :(得分:0)

我设法通过继承UISearchController来解决这个问题。我的回答是在Swift中,但也许这些原则也适用于ojective-c。请在此处查看我的回答:https://stackoverflow.com/a/46339336/8639272