2013-02-26 191 views
6

我有设置使用自动布局,像这样一个表格视图顶部的搜索栏:自动布局不工作?

_searchBar.translatesAutoresizingMaskIntoConstraints = NO; 
_tableView.translatesAutoresizingMaskIntoConstraints = NO; 

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_searchBar]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_searchBar)]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_tableView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tableView)]]; 

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_searchBar][_tableView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_searchBar, _tableView)]]; 

一切看起来都不错,当我运行它。但是当我在开始编辑搜索栏之前执行_searchBar.showsScopeBar = YES;时,搜索栏和表格视图不会自动调整大小。即使当我做[_searchBar sizeToFit]时,表格视图也不会调整大小并向下移动。为什么??

注意:我没有把搜索栏作为表格视图的标题;它只是一个父视图和两个子视图。 注2:我在拨打_searchBar.showsScopeBar = YES;之前和之后检查了_searchBarintrinsicContentSize,其大小确实发生了变化。

回答

4

你必须invalidateIntrinsicContentSize

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{ 
    searchBar.showsScopeBar = YES; 
    [searchBar invalidateIntrinsicContentSize]; 
    [searchBar setShowsCancelButton:YES animated:YES]; 
} 

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar 
{ 
    searchBar.showsScopeBar = NO; 
    [searchBar invalidateIntrinsicContentSize]; 
    [searchBar setShowsCancelButton:NO animated:YES]; 
} 

UISearchBar's scope button won't show up iOS6

+0

所以这是一个苹果的错误,对吧?顺便说一句,那些'sizeToFit's不是必需的。 – fumoboy007 2013-02-26 23:08:43

+1

@ fumoboy007关于那些'sizeToFit'引用,你是正确的,那些不需要,我已经删除它们。谢谢。 – Rob 2013-03-22 16:47:37