自定义单元格使用textView调整大小

时间:2014-02-24 09:57:33

标签: ios iphone objective-c uitableview

我有tableView,其中包含自定义单元格(带有textView的单元格),我想根据文本大小调整其中的一些单元格。我使用以下代码片段执行此操作:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    //Load text in NSString which you want in Cell's LabelText.

    NSString *cellText;

    cell.Text = someData

    //define font for Labeltext...
    UIFont *cellFont = [UIFont fontWithName:@"Georgia" size:19.0];

    CGSize constraintSize = CGSizeMake(330.0f, MAXFLOAT);

    CGSize labelSize_val = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];

    return labelSize_val.height + 20;
}

此代码在某些情况下正常工作(红色方块 - 单元格空间):

enter image description here

但是对于较大的文本,它无法正常工作(使用空格来制作更大的单元格):

enter image description here

有任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我已经习惯了,对我来说很好。

 if (SYSTEM_VERSION_LESS_THAN(@"7.0")) {
             // code here for iOS 5.0,6.0 and so on
          CGSize fontSize = [text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:17]];
           size = fontSize;
          }
           else {
                    // code here for iOS 7.0
                    NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                                          [UIFont fontWithName:@"Helvetica" size:17], NSFontAttributeName,
                                                          nil];

                    CGRect fontSizeFor7 = [text boundingRectWithSize:CGSizeMake(571, 500)
                                                             options:NSStringDrawingUsesLineFragmentOrigin
                                                          attributes:attributesDictionary
                                                             context:nil];
                    size = fontSizeFor7.size;
                }
                return size.height +20 ;

答案 1 :(得分:0)

首先,你必须覆盖在Indexpath处的行的高度,并通过函数“

计算你的字符串
  - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath   *)indexPath{

     NSString *cellText;
   cellTextHeight = [self heightOfCellForText:cellText];
     return cellTextHeight+margin;
       }        

  -(CGFloat)heightOfCellForText:(NSString *)yourString
      {


             CGRect r = [yourString boundingRectWithSize:CGSizeMake(100.0, 0)
                              options:NSStringDrawingUsesLineFragmentOrigin
                                   attributes:@{NSFontAttributeName:[UIFont  fontWithName:@"Arial" size:15]}  context:nil];
            CGSize size=r.size;
            CGFloat height=size.height;
            return height;
         }

我希望这段代码有助于感染。