我正在使用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下,一旦我点击它,搜索栏就会与状态栏重叠(见截图)。我尝试了很多不同的东西来让它正确显示但尚未找到解决方案。
答案 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