有没有人成功地保留了UISearchBar在tableHeaderView一个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
所以,试图保持searchBar在tableHeaderView-切实可行的第一步是应用适当的自动布局限制:
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)