Col*_*lin 13 uisearchbar uisearchdisplaycontroller ios
我有一个UITableViewController包含a UISearchDisplayController和UISearchBar标准方式的T (在nib中定义的所有内容).然后由一些其他视图控制器以标准方式将T包含为子视图控制器.
搜索栏正确显示:

但当我点击搜索栏实际搜索时,搜索栏会变得更高,搜索栏内的内容会下降大约20像素(呃,状态栏的高度?巧合?)就像这样:

那是怎么回事?太高了.此外,使它看起来像这样的动画是笨拙的.有什么方法可以防止这种难看的增长?
我设法解决了一个非常类似的问题,通过以编程方式设置你正在经历的问题UISearchController:
注意〜如果hidesNavigationBarDuringPresentation未设置为NO,则错误仍然存在.
#pragma mark - View Life Cycle
- (void)viewDidLoad {
[super viewDidLoad];
self.results = [[NSArray alloc] init];
// 1 \\ Results Table View
UITableView *searchResultsTableView = [[UITableView alloc] initWithFrame:self.tableView.frame];
[searchResultsTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:Identifier];
searchResultsTableView.delegate = self;
searchResultsTableView.dataSource = self;
// 2 \\ init search results table view & setting its table view
self.searchResultsTableViewController = [[UITableViewController alloc] init];
self.searchResultsTableViewController.tableView = searchResultsTableView;
self.searchResultsTableViewController.view.backgroundColor = [UIColor blackColor];
// 3 \\ init a search controller with it's tableview controller for results
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsTableViewController];
self.searchController.hidesNavigationBarDuringPresentation = NO; // ?
self.searchController.searchResultsUpdater = self;
self.searchController.delegate = self;
self.searchController.searchBar.barTintColor = [UIColor blackColor];
// 4 \\ Make an appropriate search bar (size, color, attributes) and add it as the header
[self.searchController.searchBar sizeToFit];
self.tableView.tableHeaderView = self.searchController.searchBar;
self.tableView.tableHeaderView.backgroundColor = [UIColor blackColor];
// 5 \\ Enable presentation context
self.definesPresentationContext = YES;
self.tableView.backgroundColor = [UIColor clearColor];
self.currentUser = [PFUser currentUser];
}
Run Code Online (Sandbox Code Playgroud)
添加UITableView约束条件:
湾 *我的导航栏是自定义高度 - 您的"顶部空间:顶部布局指南"可能会更改
将添加的表视图中的委托和数据源出口添加到UIViewController
一个.不要忘记以编程方式执行此操作:
@interface AddUsersViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
Run Code Online (Sandbox Code Playgroud)在您的界面扩展中:
一个.设置您UISearchConroller的代理和数据源:
#import "AddUsersViewController.h"
#define ResultsTableView self.searchResultsTableViewController.tableView
#define Identifier @"Cell"
@interface AddUsersViewController () <UISearchControllerDelegate, UISearchResultsUpdating>
@property (nonatomic) UISearchController *searchController;
@property (nonatomic) UITableViewController *searchResultsTableViewController;
@property (nonatomic, weak) UIBarButtonItem *leftBarButton;
@property (nonatomic) NSArray *results;
@end
Run Code Online (Sandbox Code Playgroud)虽然这对我有用,但我发现还有其他可能造成这种情况的情况.我的"问题"并不是搜索栏向下移动了20px(左右),而是向上移动了.我把它归因于一个自定义的UINavigationBar头,其中包括一个图像标题和自定义的NavBarButtons.考虑到这一点,这里有两个可能的解决方案:
.
您的Container View的extendedLayoutIncludesOpaqueBars属性
一个.故事板:在故事板中检查 √"在不透明的条形图下".
湾 以编程方式:yourTableView(s).extendedLayoutIncludesOpaqueBars= YES;
.
设置scopeButtonTitles为空数组.(下面)
self.searchController = UISearchController(searchResultsController: nil);
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.scopeButtonTitles = [];
self.tableView.tableHeaderView = self.searchController.searchBar;
Run Code Online (Sandbox Code Playgroud)后两个答案来自这个问题,并且可能证明在检查中也是有益的.
感谢BananaNeil的研究和测试,他发现如果你按照我的建议设置你searchController.searchBar.y = 0的搜索栏应该是你希望它的确切位置.√
不确定这是否是iOS 9特定,但设置
searchController.hidesNavigationBarDuringPresentation = NO;
解决UISearchBar了整个遏制的怪异向下运动的问题UITableView.当然,这会禁用导航栏 - 所以这可能不是你想要的.
| 归档时间: |
|
| 查看次数: |
3645 次 |
| 最近记录: |