SearchDisplayController搜索栏重叠导航栏并调整自身大小IOS7

SearchDisplayController搜索栏重叠导航栏并调整自身大小IOS7,ios,objective-c,ios7,uitableview,uisearchbar,Ios,Objective C,Ios7,Uitableview,Uisearchbar,我的应用程序有一个tableview控制器,它以表单的形式呈现 在TableViewController的顶部有一个UView,该UIView的内部有一个导航栏和一个搜索栏 在旧版本的IOS中,一切都很好,但在IOS 7中,当用户点击搜索栏时,一切都乱七八糟 正常: 当用户开始键入时: 搜索结束后: in.h 根据断点,帧的位置和大小是正确的,但它们根本不会改变self.searchDisplayController.searchBar.frame 我也试过了 -(void)search

我的应用程序有一个tableview控制器,它以表单的形式呈现

在TableViewController的顶部有一个UView,该UIView的内部有一个导航栏和一个搜索栏

在旧版本的IOS中,一切都很好,但在IOS 7中,当用户点击搜索栏时,一切都乱七八糟

正常:

当用户开始键入时:

搜索结束后:

in.h

根据断点,帧的位置和大小是正确的,但它们根本不会改变
self.searchDisplayController.searchBar.frame

我也试过了

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
        [self.topBar setHidden:YES];

    }
}

-(void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller {
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
        [self.searchDisplayController.searchBar removeFromSuperview];
        CGRect frame = self.searchDisplayController.searchBar.frame;
        frame.origin.y += self.topBar.frame.size.height;
        self.searchDisplayController.searchBar.frame = frame;
        [self.topView addSubview:self.searchDisplayController.searchBar];
        [self.topView bringSubviewToFront:self.topBar];

        [self.topBar setHidden:NO];
    }
}

我如何解决这个问题

尝试在表视图控制器中设置此值:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]){
    self.edgesForExtendedLayout = UIRectEdgeNone;
}
并将视图层次结构更改为具有视图,将tableView、搜索栏和nag栏作为子视图。将表视图控制器设置为视图控制器,并将其作为数据源和委托

或者不要使用searchBarDisplayController,只使用搜索栏及其委托方法:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText

我有一个类似的问题,我认为searchDisplayController将搜索栏的大小扩展到了完整的tableHeaderView大小(我真的不知道它为什么这样做)。我在tableHeaderView中有搜索栏和一个自定义工具栏(均为44px高)

我已经解决了这个问题:

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
    self.tableView.tableHeaderView.frame = CGRectMake(0, 0, self.tableView.bounds.size.width, 44);
}

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller {
    self.tableView.tableHeaderView.frame = CGRectMake(0, 0, self.tableView.bounds.size.width, 88);
}

因此,我只是在输入搜索时将tableHeaderView设置为单个UISearchBar的大小,并在所有动画完成后将其设置回原来的大小。这解决了我的问题。甚至动画也可以工作(但它们不在childViewController中。不知道为什么)

您添加了搜索栏或搜索显示控制器吗?这是一个SearchBarDisplayController您是否尝试了我的解决方案?导航栏位于表视图中的原因是什么?我在发布问题之前已经尝试过了,它不起作用,代码添加到问题中,非常感谢!self.edgesForExtendedLayout=。没有一个像符咒一样有效!
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
    self.tableView.tableHeaderView.frame = CGRectMake(0, 0, self.tableView.bounds.size.width, 44);
}

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller {
    self.tableView.tableHeaderView.frame = CGRectMake(0, 0, self.tableView.bounds.size.width, 88);
}