Ios UISearchBar更改self.view框架

Ios UISearchBar更改self.view框架,ios,ios7,uisearchbar,Ios,Ios7,Uisearchbar,我在导航栏下方的屏幕上添加了一个带有UISearchDisplayController的UISearchBar。当我点击UISearchBar时,它会按预期向上滑动以替换导航栏。但是,它会调整基础视图的大小并显示间隙,如下所示: 这看起来像是一个范围栏的空间,但在IB中是禁用的 另外,当我在激活ui搜索栏之前和之后记录self.view.frame时,我看到self.view.frame位置和高度被44pt修改: {{0, 20}, {320, 548}} {{0, 64}, {320, 50

我在导航栏下方的屏幕上添加了一个带有
UISearchDisplayController
UISearchBar
。当我点击
UISearchBar
时,它会按预期向上滑动以替换导航栏。但是,它会调整基础视图的大小并显示间隙,如下所示:

这看起来像是一个范围栏的空间,但在IB中是禁用的

另外,当我在激活
ui搜索栏之前和之后记录
self.view.frame
时,我看到
self.view.frame
位置和高度被44pt修改:

{{0, 20}, {320, 548}}
{{0, 64}, {320, 504}} 
有没有办法解决这个问题?顺便说一下,这不会发生在iOS6中,只有iOS7

以下是它在iOS6中的外观:


尝试在
viewDidLoad
中放置以下行以修复它

    self.edgesForExtendedLayout = UIRectEdgeNone;

iOS 7上的UISearchDisplayController行为似乎有很多缺陷,以防您试图自定义它(特别是自定义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-是其superview框架内的开始搜索栏偏移量:

self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, kSearchBarStartTopOffset, 320, 44)];

希望这能有所帮助,谢谢

我终于找到了导致
ui搜索栏下出现黑色条纹的原因。显然,这是
范围栏的占位符,诀窍在于Interface Builder中:

选中
UISearchBar
的“显示范围栏”选项时,Xcode会自动为范围按钮标题添加2个占位符对象。但是,如果取消选中“显示范围栏”选项,则不会删除这些占位符。只要该框中有多个作用域标题,
UISearchBar
将在其下方显示一个
scopeBar
。所以我的解决方案就是手动删除这两个标题(只留下一个标题也删除了黑条)


希望这对某人有所帮助。

这可能是因为搜索时可以显示范围栏。确保使用
showscopebar
属性将其删除。如上所述,它在IB中未选中。我也尝试在代码中将其设置为“否”,但没有效果。这种情况只发生在iOS7上,iOS6I中没有假定的范围栏占位符(通过检查iOS7),这实际上修复了我在状态栏上攀爬ui搜索栏的另一个问题。然而,目前的问题仍然存在,即使这一行…好的,明白了。你想要实现什么?在搜索栏向上移动后,阻止搜索栏移动到视图的顶部?不,我希望视图从搜索栏的底部开始(就像在IOS6中那样),它们之间没有黑色的间隙。您有没有想过如何解决这个问题?