在UISearchBar下添加后,iOS范围栏不出现

时间:2018-06-21 09:42:58

标签: ios objective-c uitableview uisearchbar

我在搜索栏下方添加了范围栏。但是,没有出现范围栏。任何想法?请帮忙。

- (UISearchBar *)searchBar{
    if (!_searchBar) {
        _searchBar=[[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, 24)];
        [_searchBar setBackgroundImage:[UIImage imageNamed:@"ic_searchBar_bgImage"]];
        [_searchBar sizeToFit];
        [_searchBar setPlaceholder:@"Search"];
        [_searchBar.layer setBorderWidth:0.5];
        _searchBar.showsScopeBar = YES;
        _searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"All", @"Near Me", @"Coming Soon", nil];

        [_searchBar.layer setBorderColor:[UIColor colorWithRed:229.0/255 green:229.0/255 blue:229.0/255 alpha:1].CGColor];
        [_searchBar setDelegate:self];
        [_searchBar setKeyboardType:UIKeyboardTypeDefault];
        [[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{
                                                                                                     NSFontAttributeName: [UIFont fontWithName:@"Bitter" size:14],
                                                                                                     }];
    }
    return _searchBar;
}

已编辑: 我在Tableview标头中添加了它。如何更改才能使其显示?

- (UITableView *)tableView{
    if (!_tableView) {
        _tableView=[[UITableView alloc]initWithFrame:CGRectMake(0.0, 0.0, kScreenWidth, kScreenHeight-49.0) style:UITableViewStylePlain];
        [_tableView setDelegate:self];
        [_tableView setDataSource:self];

        _tableView.tableHeaderView=self.searchBar;

        UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
        [_tableView setTableFooterView:v];

    }
    return _tableView;
}

1 个答案:

答案 0 :(得分:1)

我尝试运行您的代码,范围栏对我来说很好。

因此,尽管我无法从代码中弄清为什么它不应该出现,但我将在此处列举一些调试技巧,以帮助您了解 else 可能会导致此问题的错误。

当您的应用处于调试运行模式(iOS模拟器)时,请尝试以下操作:

  • XCode->调试菜单->查看调试
  • 按“捕获视图层次结构”。
  • 它应该在左侧带有一个树形结构,显示您的表格视图。在右侧,它将显示您的视图的屏幕截图
  • 在左侧树上,找到UISearchbar
  • 在其层次结构下,搜索类型为_UISearchBarScopeBarBackground的对象。紧跟着UISegmentedControl,它具有对应于每个合并范围文本的段。

请参考下面的图片(该图片应显示在您的范围层次结构中):

enter image description here

  • 如果UISegmentedControl在这里看起来不错,但在右侧不可见,请检查其是否被其他视图/表视图本身隐藏了。进行一些帧调整应该可以解决此问题。

  • 如果UISegmentedControl本身未出现在左侧,则您似乎遇到了严重的问题。可能是您的商店没有初始化,您可能要检查表格视图是否正确初始化。无论如何,这种情况发生的可能性很小,并且只有在模拟器屏幕上什么都看不到的情况下才有可能。