2014-02-13 64 views
2

我無法使其工作。我在當前視圖控制器上使用自動佈局。我有一個UITableView具有部分標題,每個部分標題具有UITextView具有根據部分長度不同的文本。我不能讓它自動放大其高度以適應內容,這樣就沒有必要滾動(其內容屬性文本)如何使UITextView在部分標題中將其高度調整爲其內容

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    //UITextView *tv = [[UITextView alloc] init]; 
    //tv.editable = NO;   
    //tv.attributedText = [self millionaireResults][section][@"header"];  
    //return tv; 

    return [self millionaireResults][section][@"headerview"]; //this is a uitextview 
} 

// this did not workeither 
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    UITextView *tv = [self millionaireResults][section][@"headerview"]; 
    return tv.frame.size.height; 

} 

這又如何解決?

我更新每邁克爾的建議,下面的代碼

回答

0

這是對我來說

  1. 工作時,你所創建的UITextView的,你必須設置scrollEnabled 假答案。
  2. 你的UITextView必須給予覆蓋水平空間的寬度,否則自動大小計算是關閉的(有時它有時不是,我認爲取決於wordbreak或某物,但它是不一致的!),並且只在你旋轉時修復它自己該設備強制重繪
  3. 在heightForHeaderInSection方法,你必須得到 sizeThatFits並返回其高度爲文本視圖

這裏的高度是高度計算(我發現這本網站http://www.raywenderlich.com/50151/text-kit-tutorial

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    UITextView *tv1 = (UITextView *)[self millionaireResults][section][@"headerview"]; 
    // sizethatfits calculates the perfect size for this UITextView 
    // if you gave your UITextView full width 
    CGSize goodsize = [tv1 sizeThatFits:tv1.frame.size]; 
    return goodsize.height+4; // here 4 is not necessary, i just put it as an offset 
} 

下面是創建這些對象的UITextView

for (int i = 0; i < [milarr count]; i++) {   
    UITextView *tv = [[UITextView alloc] init]; 
    tv.editable = NO; 
    tv.attributedText = milarr[i]; 
    // labelTopTitle and this table in question have same width in an autoLayouted view 
    // so i am giving width of labelTopTitle to let UITextView cover full available 
    // horizontal space 
    tv.frame = CGRectMake(0, 0, self.labelTopTitle.frame.size.width,FLT_MAX); 
    //tv.backgroundColor = [UIColor grayColor]; 
    //tv.textContainerInset = UIEdgeInsetsZero; 
    tv.scrollEnabled = NO; 
    [results addObject:@{@"headerview": tv, 
         @"rows":@[...] 
         } 
    ]; 
} 
1

讓你的「UITextView *tv」對象的屬性,然後你可以做這樣的事情(假設你只有有一個確切的部分,將表視圖):

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    return (self.tv.frame.size.height); 
} 

如果您有更多的部分(出現這樣做),您應該使該屬性成爲NSArray的UITextView對象。

這也意味着您需要在「viewForHeaderInSection:」被調用之前設置您的「tv」對象的內容。

+0

它的工作代碼!謝謝!你能告訴我爲什麼它有效嗎?唯一的區別是,不是在viewForHeaderInSection:...方法內創建UITextView對象,而是按照您的建議將它們創建爲NSArray屬性。在該委託方法中創建有什麼問題?如果你知道的話,我會很感激你的答案。 – Nihat

+1

,因爲'heightForHeaderInSection'在調用'viewForHeaderInSection'之前被調用。 iOS需要知道在實際繪製單個單元格和節標題之前表格和內容將會有多高。 –

+0

討厭重新打開這個,但上面的代碼不起作用(我有一個返回200;)在我的代碼(我的愚蠢),使它適合UITextView通過返回該大小。在你的代碼中返回self.tv.frame.size.height返回0.000000(請不要冒犯,但我將不得不取消接受的答案,直到我得到它的工作) – Nihat

相關問題