无法更改UITextView的大小

时间:2013-10-11 13:24:35

标签: uitableview interface-builder ios7 uitextview

我通过Interface Builder将一些tableViewCells添加到tableView中,其中一个包含一个UITextView。

在单击Button时重新加载tableView:

- (void)updateViewWithMessage:(NSString *)message
{
    self.someMessage = message;
    [self.tableView reloadData];
}

在我的cellForRowAtIndexPath方法中,我检查此单元格并执行以下操作:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CellIdentifier = kMyCustomCell;
    MyCustomCell *contentCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    CGRect textViewFrame = contentCell.contentTextView.frame;
    textViewFrame.size.height = [self heightForContentView];

    NSLog(@"%f, %f, %f, %f\n", textViewFrame.origin.x,
          textViewFrame.origin.y,
          textViewFrame.size.width,
          textViewFrame.size.height);

    contentCell.contentTextView.frame = textViewFrame;
    contentCell.contentTextView.text = self.someMessage;

    return contentCell;
}

在heightForContentView()中,我计算高度:

- (CGFloat)heightForContentView
{
    CGSize boundingRectSize = CGSizeMake(kCustomCellWidth - 20, CGFLOAT_MAX);
    CGRect textViewRect = [self.someMessage boundingRectWithSize:boundingRectSize
                                                     options:NSStringDrawingUsesLineFragmentOrigin
                                              attributes:nil
                                                 context:nil];
    return textViewRect.size.height + 20;
}

单元格,如果我将行高度设置为某个值,则会正确调整大小。但是其中的textView没有。 如果我单击我的按钮两次(再次调用updateViewWithMessage:方法)然后调整大小 - 这很奇怪!

顺便说一句:NSLog打印正确的大小,所以它们肯定是设置的,但是为什么这个TextView没有调整呢?

有人可以帮助我快速解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

评论后编辑:

我认为您没有调整UITextView的大小,请在调整contentCell之前添加此代码:

contentTextView.frame = CGRectMake(CGRectGetMinX(contentTextView.frame), CGRectGetMinY(contentTextView.frame), CGRectGetWidth(contentTextView.frame), textViewFrame.size.height);

旧答案:

也许您忘记传递attributes来计算新尺寸:

CGRect textViewRect = [self.someMessage boundingRectWithSize:boundingRectSize
                                             options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                          attributes:@{NSFontAttributeName:FONT}
                                             context:nil];

FONT是您当前的字体。

看看here