2014-02-21 68 views
1

我想創建建議給UISearchBar,所以我添加了UITableView,並且我想通過內容更改UITableView的高度。iOS - 動態更改uitableview的高度

當我得到的數據我打電話:

[self.searchTableView reloadData]; 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section我試圖調整大小的tableView:(20是1行的高度)

CGRect bounds = [tableView bounds]; 
    NSLog(@"%f",tableView.contentSize.height); 
    [tableView setBounds:CGRectMake(bounds.origin.x, 
            bounds.origin.y, 
            bounds.size.width, 
            20 * [self.suggestionData count])]; 

    /* 
    CGRect frame = self.searchTableView.frame;; 
    frame.size.height = 20 * [self.suggestionData count]; 
    self.searchTableView.frame = frame; 
    */ 

我試過的tableView。 contentSize.height也是如此,但它沒有工作。也許有必要改變故事板或我的東西,當我試圖找到解決方案,我改變了一些錯誤。我只是得到了tableview的高度,就像我在storyboard中設置的一樣。謝謝

+0

你想通過改變UITableView的高度來實現什麼? –

+0

更改桌子的高度。該表附加到searchBar,並作爲該searchBar(自動完成功能)的建議。 –

+0

爲什麼不直接使用UISearchDisplayController? –

回答

0

由於UITableView延伸UIScrollView我建議你使用下面的方法來獲得一個表視圖的邊界適合其內容大小。

-init或您的特殊的TableView的-awakeFromNib(可以延長的UITableView或創建一個類別)註冊觀察者

[self addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil]; 

然後添加

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    if (object == self && [keyPath isEqualToString:@"contentSize"]) { 
     CGRect frame = self.frame; 
     CGFloat currentHeight = self.contentSize.height; 
     if (fabs(currentHeight - frame.size.height) > FLT_EPSILON) { 
      frame.size.height = self.contentSize.height; 
      self.frame = frame; 
     } 
    } else { 
     [super observeValueForKeyPath:keyPath ofObject:object change:change context:nil]; 
    } 
} 

記住要註銷觀察員-dealloc

- (void)dealloc { 
    [self removeObserver:self forKeyPath:@"contentSize"]; 
} 
+0

我想我知道這是如何工作,但我有一個小問題。自我是在我的代碼viewController,但它應該是tableView是不是?所以我應該改變它到我的searchTableView? –

+0

您可以創建一個UITableView的類別,因爲您實際上並不需要任何額外的ivar或子類添加此自動調整行爲的tableView。但是,如果您願意,您可以在控制器內部使用相同的機制,通過控制器的self.tableView屬性利用KVO。爲了更直接地解決您的問題,是的,您應該將此機制應用於您的searchTableView,觀察其contentSize屬性的更改 – HepaKKes

+0

我必須閱讀一些關於此的文章,但現在我有工作解決方案,它的工作原理與我需要的完全一樣。非常感謝 :) –