2013-02-26 95 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