我已将UISearchBar
添加UISearchDisplayController
到导航栏下方的屏幕。当我点按UISearchBar
时,它会向上滑动以按预期更换导航栏。但是,它会使基础视图重新调整大小并显示间隙,如下所示:
这看起来像范围栏的空间,但在IB中被禁用。
另外,当我在self.view.frame
被激活之前和之后记录UISearchBar
时,我看到self.view.frame
位置和高度被44pt修改:
{{0, 20}, {320, 548}}
{{0, 64}, {320, 504}}
任何想法如何解决这个问题?顺便说一句,这在iOS6中并不会发生,只有iOS7。
以下是iOS6中的外观:
答案 0 :(得分:0)
尝试在viewDidLoad
中添加以下一行来修复它。
self.edgesForExtendedLayout = UIRectEdgeNone;
答案 1 :(得分:0)
UISearchDisplayController在iOS 7上的行为似乎非常麻烦,以防您尝试自定义它(特别是自定义searchResultsTableView)。我不确定,但也许,我有一些类似的问题。
以下代码示例帮助了我:
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {
UITableView *searchTable = self.searchResults.searchResultsTableView;
if (IS_IOS7 && searchTable.frame.origin.y != kSearchBarStartTopOffset) {
[searchTable kSearchBarStartTopOffset];
[searchTable setHeight:searchTable.height - kSearchBarStartTopOffset];
}
}
kSearchBarStartTopOffset - 是超视图框架内的起始搜索栏偏移量:
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, kSearchBarStartTopOffset, 320, 44)];
希望这有帮助,谢谢
答案 2 :(得分:0)
我最终发现导致UISearchBar
下的黑条纹的原因。显然,这是scopeBar
的占位符,诀窍在于Interface Builder:
当您查看“显示范围栏'对于UISearchBar
的选项,Xcode会自动为范围按钮标题添加2个占位符对象。但是,如果取消选中“显示范围栏”'选项,不删除这些占位符。只要您在该框中有超过1个范围标题,UISearchBar
就会在其下方显示scopeBar
。因此,我的解决方案就是手动删除这两个标题(只留下一个标题也删除了黑色条纹)。
希望这有助于某人。