带有displaysSearchBarInNavigationBar的UISearchDisplayController使用navigationBar.translucent = false推送结果视图

Jos*_*uez 18 uisearchdisplaycontroller ios ios7

我正在使用UISearchDisplayController与新的ios 7功能displaysSearchBarInNavigationBar和不透明的导航栏.搜索显示控制器似乎错误地定位了它的视图.

我尝试插入委托方法和重新定位,但我不能让初始位置正确,也不能在旋转时.此外,这似乎是一个草率的解决方案.

搜索栏中没有文字

在搜索栏中显示文字

小智 19

只需在故事板中为视图控制器启用"Under Opaque Bars"或者如果你想编码.然后添加以下行.你好:)

self.edgesForExtendedLayout = UIRectEdgeAll;
self.extendedLayoutIncludesOpaqueBars = YES;
Run Code Online (Sandbox Code Playgroud)

  • 将extendedLayoutIncludesOpaqueBars值更改为YES修复了我的问题,谢谢! (2认同)

fjb*_*chi 0

我遇到了同样的问题,我已经通过以下方式解决了:

  1. 子类 UISearchDisplayController 以便在 iOS 6 和 7 的导航栏中包含 UISearchBar。我已经覆盖:
    -(void)setActive:(BOOL)可见动画:(BOOL)动画
    {
        如果(SYSTEM_VERSION_LESS_THAN(@“7”)){
            if(self.active == 可见) return;

            [self.searchContentsController.navigationController setNavigationBarHidden:NO 动画:NO];

            如果(可见){
                [self.searchBar 成为FirstResponder];
            } 别的 {
                [self.searchBar resignFirstResponder];
            }
        } 别的 {
            self.searchContentsController.view.frame = CGRectMake(0, 0, kCurrentScreenWidth, kCurrentScreenHeight);
            [超级setActive:可见动画:动画];
        }
    }

2.在 UISearchDisplayDelegate 中我添加了以下内容:

    - (void) searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {
        // iOS7 黑客
        如果(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@“7”)){
            controller.searchResultsTableView.contentInset = UIEdgeInsetsMake(0.f, 0.f, 0.f, 0.f);
        }

    }

    - (BOOL) searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
    {
        // -- iOS 7 黑客

        如果(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@“7”)){
            controller.searchResultsTableView.frame = CGRectMake(0, 64, kCurrentScreenWidth, kCurrentScreenHeight-64);
            [controller.searchContentsController.view setNeedsLayout];
        }
    }