2012-05-29 58 views
0

我在調整UITableViewCell中的UITextView的大小。我也想相應地調整UITableViewCell的大小。我的UITableViewCell調整正確,但UITextView不。它最終只是兩條線,而不是根據正確的尺寸來確定尺寸。當我cellForRowAtIndexPath方法中初始化它,它看起來像:在UITableViewCell中調整UITextView的尺寸

 UITextView *notesTextView = [[UITextView alloc] initWithFrame:CGRectMake(83, 12, TEXTVIEW_WIDTH, 22)]; 

     notesTextView.tag = TEXTVIEW_TAG; 
     notesTextView.delegate = self; 

     [cell.contentView addSubview:notesTextView]; 

當我試圖修改它在TextView的委託方法,我做的:

CGSize size = [textView.text sizeWithFont:textView.font constrainedToSize:CGSizeMake(TEXTVIEW_WIDTH, 460) lineBreakMode:UILineBreakModeWordWrap]; 
NSLog(@"size: %@", NSStringFromCGSize(size)); // has the correct size 
if (size.height > self.notesRowHeight) { 
    self.notesRowHeight = size.height; 
    UITextView *aTextView = (UITextView *)[self.view viewWithTag:TEXTVIEW_TAG]; 
    CGRect textViewFrame = CGRectMake(aTextView.frame.origin.x, aTextView.frame.origin.y, TEXTVIEW_WIDTH, size.height); 
    aTextView.frame = textViewFrame; 
    aTextView.contentSize = size; 
    [aTextView sizeToFit]; 
    [aTextView sizeThatFits:size]; 
    NSLog(@"%@", NSStringFromCGRect(aTextView.frame)); // has the correct height 

那麼最終發生的事情是的tableView正確調整大小,即使textView框架尺寸正確(例如{{83,12},{197,120}}),textView只有2行。它不會像我打算的那樣取得UITableViewCell的大小。

編輯:當我嘗試調整框架UITextView在一個正常的UIView不是UITableViewCell,它工作得很好。所以我不確定這種情況有什麼不同。

+0

你沒有提到究竟你在這遇到什麼問題,這將是很好,如果你可以添加日誌的詳細信息,你得到了什麼,你期待什麼。 – rishi

+0

@rishi我加了更多的問題。 – Crystal

回答

0

我會給你一個不同的觀點....

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     . 
     . 
     if(_YOUR_ROW_ && _YOUR_SECTION_) 
     { 

      cell.textView.text = Text_Of_TextView; 
     } 
     . 
     . 

} 



- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    . 
    . 
    if(_YOUR_ROW_ && _YOUR_SECTION_) 
    { 


     UIFont * FontSize = [UIFont systemFontOfSize:14.0]; 
     CGSize textSize = [Text_Of_TextView sizeWithFont:FontSize constrainedToSize:CGSizeMake(Width_OF_textView, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap]; 

     return textSize.height+PADDING; 
    } 
    . 
    . 
} 




-(void)textViewDidEndEditing:(UITextView *)textView 
{ 

    [Text_Of_TextView setText:textView.text]; 


CGRect frame = textViewInRow.frame; 
     frame.size.height = textViewInRow.contentSize.height; 
     textViewInRow.frame = frame; 
[TableView_InView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:_YOUR_ROW_ inSection:_YOUR_SECTION_]] withRowAnimation:UITableViewRowAnimationNone]; 

} 

,也不要忘記實現自動調整大小行爲的TextView

1

我發現解決這個的最好方法。

首先,你要創建你的UITextView並將它添加到你的單元的contentView中。我創建的UITextView的實例變量稱爲「cellTextView」這裏是我使用的代碼:

- (UITableViewCell *)tableView:(UITableView *)tableView fileNameCellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; 

    if (!cellTextView) { 
     cellTextView = [[UITextView alloc] initWithFrame:CGRectMake(5.0, 5.0, cell.bounds.size.width - 30.0, cell.bounds.size.height - 10.0)]; // I use these x and y values plus the height value for padding purposes. 
    } 
    [cellTextView setBackgroundColor:[UIColor clearColor]]; 
    [cellTextView setScrollEnabled:FALSE]; 
    [cellTextView setFont:[UIFont boldSystemFontOfSize:13.0]]; 
    [cellTextView setDelegate:self]; 
    [cellTextView setTextColor:[UIColor blackColor]]; 
    [cellTextView setContentInset:UIEdgeInsetsZero]; 
    [cell.contentView addSubview:cellTextView]; 

    return cell; 
} 

然後,創建一個int變量稱爲numberOfLines並設置變量設置爲1在init方法。之後,您textViewDelegate的textViewDidChange方法,使用此代碼:

- (void)textViewDidChange:(UITextView *)textView 
{ 
    numberOfLines = (textView.contentSize.height/textView.font.lineHeight) - 1; 

    float height = 44.0; 
    height += (textView.font.lineHeight * (numberOfLines - 1)); 

    CGRect textViewFrame = [textView frame]; 
    textViewFrame.size.height = height - 10.0; //The 10 value is to retrieve the same height padding I inputed earlier when I initialized the UITextView 
    [textView setFrame:textViewFrame]; 

    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 

    [cellTextView setContentInset:UIEdgeInsetsZero]; 
}  

最後,這段代碼粘貼到您的heightForRowAtIndexPath方法:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    float height = 44.0; 
    if (cellTextView) { 
     height += (cellTextView.font.lineHeight * (numberOfLines - 1)); 
    } 
    return height; 
} 
0

這是一個簡單的項目,演示如何使用自動佈局調整iOS 8以上的單元格。幾乎不需要特殊的代碼。請參閱readme.md瞭解關鍵點。

project on github