1

我正在尝试UISearchBar在它变得活跃时进行扩展。

我遇到的问题是,搜索栏仅在用户在其中输入至少 2 个字符后才会扩展。在此之前,它已固定到位。我searchBar.alpha =0.7;在其中添加了一个并且有效,因此一旦用户触摸搜索栏,似乎就会调用此方法

- (void)searchDisplayControllerDidBeginSearch : (UISearchDisplayController *)controller
{
    [UIView animateWithDuration:0.2 animations:^{
        self.searchBar.frame = CGRectMake(0,10,250,self.searchBar.frame.size.height);
        // self.searchBar.frame = CGRectMake(70, 10, 250, 40);
        searchBar.alpha =0.7;
        [searchBar layoutSubviews];            
    }];    
}

不确定我设置的方式是否有问题。这是我所拥有的:

.h

@property (weak, nonatomic) IBOutlet UISearchBar *searchBar;

.m

@synthesize searchBar;

并在StoryBoard

在此处输入图像描述

谢谢您的帮助。

4

2 回答 2

1

尝试使 UISearchBar ( UISearchBarDelegate) 的类委托并将您的动画代码粘贴到- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar方法实现中。我认为它应该有所帮助。

于 2013-02-03T21:25:28.797 回答
1

我在为 UISearchBar 大小和位置设置动画时遇到了类似的问题,结果证明该问题与 iOS 6 中的自动布局有关。我的代码中的动画块与您的完全相同,只是我从 - (void)searchBarTextDidBeginEditing 调用它: (UISearchBar *) 搜索栏。

我通过在我的搜索栏子类中searchBar.frame被覆盖的日志找到了。layoutSubviews此问答解释了“layoutSubviews”在 iOS 6 上的行为方式有何不同(选择退出单个视图的自动布局?

基于此,如果您正在为 iOS 6 构建,动画 UISearchBar 框架的选项似乎是禁用自动布局或以编程方式实例化 UISearchBar。我选择了后者,它奏效了。

PS:如果您要禁用自动布局,您可以为整个情节提要或仅禁用 .xib (更多内容:在 iOS 6 中启用自动布局,同时保持与 iOS 5 向后兼容

希望这可以帮助。

于 2013-02-03T23:52:24.807 回答