iOS Scope Bar 添加到 UISearchBar 下后不出现

Posted

技术标签:

【中文标题】iOS Scope Bar 添加到 UISearchBar 下后不出现【英文标题】:iOS Scope Bar does not appear after added under UISearchBar 【发布时间】:2018-06-21 09:42:57 【问题描述】:

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

- (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;

【问题讨论】:

您在哪里将searchBar 添加到视图中? 【参考方案1】:

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

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

当您的应用处于调试运行模式(ios 模拟器)时,试试这个:

XCode -> 调试菜单 -> 查看调试 按捕获视图层次结构。 它应该在左侧出现一个树结构,显示您的表格视图。在右侧,它将显示您的视图的屏幕截图 在左侧树中,查找UISearchbar。 在其层次结构下,搜索类型为:_UISearchBarScopeBarBackground 的对象。紧随其后的是UISegmentedControl,它具有与每个范围文本对应的段。

参考下图(这应该出现在您的范围层次结构中):

如果UISegmentedControl 在此处显示正常但在右侧不可见,请检查它是否被其他视图/表格视图本身隐藏。一些框架调整应该可以解决这个问题。

如果UISegmentedControl 本身没有出现在左侧,则您的问题似乎很严重。可能您的插座没有初始化,您可能想检查您的表格视图是否已正确初始化。在任何情况下,这种情况都不太可能发生,并且只有在您的模拟器屏幕上什么都看不到的情况下才有可能。

【讨论】:

感谢 Nirav,我没有看到那里有任何 UISegmentedControl。将进一步研究它。感谢您的提示。 最后我使用单独的 UISegmentedControl 来完成我需要它永久显示的操作。 奇怪,它不起作用。你向苹果公司提交了雷达吗? developer.apple.com/bug-reporting 因为我想知道 UISearchbar 是否影响了它。现在我应用了单独的 UISegmentedControl 及其工作! 很高兴知道,但即使没有显示,它至少应该在那里。你最终重新发明了***!你看到这个了吗? ***.com/a/25788774/1506363

以上是关于iOS Scope Bar 添加到 UISearchBar 下后不出现的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 的closure 和 hoisting

iOS 7 修改默认布局从status bar 底部开始

<scope>provided</scope>作用

iOS开发 : Navigation Bar的简单设置

Angular $scope 与文件输入类型冲突

iOS 13 版本的 XCUI 测试框架中未检测到 iOS Search Bar