19

我有一个 UIViewController,我想在其中显示一个带有 serchBar 的表格视图。

//viewDidLoad
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0,
                                                           0, 
                                                           SCREEN_WIDTH(),
                                                           SCREEN_HEIGHT())
                                                    style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;

[self.view addSubview:_tableView];

// adding uisearch bar
searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];

_tableView.tableHeaderView = searchBar;

//
 searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
searchDisplayController.delegate = self;
searchDisplayController.searchResultsDataSource = self;

当我在 uisearch 栏内单击以启动动画并且看起来它有 20px 不需要的偏移量时,就会出现问题。

4

8 回答 8

15

在您的 Storyboard 中,选择有问题的控制器,查看 Attributes 选项卡并尝试编辑这些设置:

  • 在顶栏下
  • 在不透明条下

我通过取消标记这些设置解决了类似的问题。

于 2013-10-25T10:21:08.837 回答
8

我找到了导致此问题的原因。当您将 navigationBar.translucent 设置为 NO 时,似乎动画会变得混乱。如果你让你的navigationBar 半透明,一切都应该可以正常工作,但这绝对不是一个理想的解决方案。我将尝试找到解决方法。

于 2013-12-04T15:31:51.303 回答
1
UITableView *_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0,
                                                           64,
                                                           self.view.frame.size.width,
                                                           self.view.frame.size.height)
                                          style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;

[self.view addSubview:_tableView];

// adding uisearch bar
UISearchBar* searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];

_tableView.tableHeaderView = searchBar;



//
UISearchDisplayController* searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
searchDisplayController.delegate = self;
searchDisplayController.searchResultsDataSource = self;

我只是用 UINavigationcontroller 嵌入我的控制器,它工作得很好..在此处输入图像描述

于 2013-10-25T10:34:57.000 回答
1

您可以通过继承 UISearchDisplayController 并添加以下内容来取消动画:

- (void)setActive:(BOOL)visible animated:(BOOL)animated
{
     if(self.active == visible) return;
     [self.searchContentsController.navigationController setNavigationBarHidden:YES animated:NO];
     [super setActive:visible animated:animated];
     [self.searchContentsController.navigationController setNavigationBarHidden:NO animated:NO];
     if (visible) {
          [self.searchBar becomeFirstResponder];
     } else {
          [self.searchBar resignFirstResponder];
     }
}
于 2014-08-01T20:48:17.470 回答
1

codyko给了我一个想法。这是因为导航栏不是半透明的。因此,我在此视图控制器上将其设置为半透明,并在离开时使用以下代码休息:

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    self.navigationController.navigationBar.translucent = NO;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.navigationController.navigationBar.translucent = YES;
}

现在这个控制器上的导航栏稍微褪色了,所以我UIView在它后面添加了一个与导航栏相同的颜色,使它看起来不透明。我知道它并不完美,但效果很好。

于 2015-09-19T05:24:53.397 回答
1

提醒任何有类似问题的人。我需要添加这一行来修复问题:

self.edgesForExtendedLayout = UIRectEdgeNone;
于 2015-09-19T23:26:51.317 回答
0

为什么要以编程方式而不是在 StoryBoard 中创建 searchBar ?我目前正在使用 searchBar,添加到情节提要中并且工作正常(我必须更改 contentOffset )

于 2013-10-25T13:38:21.527 回答
-2

我已经应用了你的代码,它对我来说很好,只需隐藏你的导航栏并从 y = 20 开始搜索栏,而不是 y = 0;

于 2013-10-21T10:57:27.793 回答