【问题标题】:UISearchBar animation issueUISearchBar 动画问题
【发布时间】:2013-10-28 09:02:07
【问题描述】:

我有一个 UIViewController,我想在其中显示一个带有 serchBar 的 tableview。

//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 不需要的偏移量时,就会出现问题。

【问题讨论】:

  • 你能把我加到 NSChat 组吗?还要在 IB 中试验这些尺寸,看看问题是否仍然存在。而哪些维度会消除这个问题也可以从IB中推断出来
  • 你在使用任何类型的动画吗? @卢卡
  • No.. 刚刚将 UIsearchbar 添加到 tableview 标题中。

标签: uitableview ios7 uisearchbar uisearchdisplaycontroller


【解决方案1】:

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

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

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

【讨论】:

  • 我为我的项目添加了一个链接.. 看看
  • 不错的解决方案。我发现的唯一问题是视图控制器的导航栏颜色会有所不同(由于不再透明覆盖),因此如果您有多个视图控制器,您可能需要全部更改以保持一致性
  • 故事板又来了!
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    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 嵌入我的控制器,它工作得很好..

    【讨论】:

      【解决方案4】:

      您可以通过继承 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];
           }
      }
      

      【讨论】:

        【解决方案5】:

        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,使其看起来不透明。我知道它并不完美,但效果很好。

        【讨论】:

          【解决方案6】:

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

          self.edgesForExtendedLayout = UIRectEdgeNone;
          

          【讨论】:

            【解决方案7】:

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

            【讨论】:

            • 更改内容偏移量是什么意思?您可以发布您的代码的 sn-p 吗?
            • 是的,就是这样:-(void) viewDidLayoutSubviews{ [self.tableView setContentOffset:CGPointMake(0, -60)]; }
            【解决方案8】:

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

            【讨论】:

            • 能否发个测试链接让我比较一下
            • 你的测试中没有导航栏
            • 我正在使用应用程序中的导航栏我不认为这是要走的路
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多