UITextView动态调整文本框/单元格的大小

时间:2011-12-05 13:30:30

标签: iphone objective-c ios uitextview

我正在从XML Feed中加载我的UITextView,因此文本不断变化。我正在尝试以下方法来调整单元格和文本的大小,并调整单元格但不调整文本视图,它只是不显示文本视图,有时只显示文本视图的一部分。

任何有关正确方法的提示都会非常感激;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    AssessObject *newObj1;
    newObj1=[totalArray objectAtIndex:indexPath.row];

    NSString *cellText = newObj1.routeText;

    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:16.0];
    CGSize constraintSize = CGSizeMake(188.0, CGFLOAT_MAX);
    CGSize textViewSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];


    return textViewSize.height + 200;


}

4 个答案:

答案 0 :(得分:3)

检查已添加到单元格中的UITextView的AutoresizingMask。

确保将其设置为使其与单元格一起调整大小(您可以在IB中执行此操作,或使用UIViewAutoresizingMaskFlexibleWidth|UIViewAutoresizingMaskFlexibleWidth值通过代码执行此操作)

答案 1 :(得分:1)

将textView大小设置为等于textView的contentSize。 像这样:

CGRectMake(textView.frame.origin.x, textView.frame.origin.y, textView.frame.size.width, textView.contentSize.height);

我正在使textView的高度等于它的contentView的高度。

答案 2 :(得分:0)

设置UITextView的字体大小,文本内容和框架rect,然后[UITextView sizeToFit]计算UITextView的contentSize,然后用contentSize的大小计算行高。

不要忘记调整UITextView的框架矩形;

答案 3 :(得分:0)

当我把它放到ScrollView上时,我已经根据文本的数量使用了Bruno的想法来调整TextView的大小。这就是我这样做的方式。那里有一堆常数,你可能不会使用。将textView添加到ScrollView后调整textView非常重要。

    // Programmatic creation of scroll view layout 
NSString *text = @"Your text";
CGFloat textOffSetInColumn = 10;
CGFloat infoTextWidth = 196;
CGFloat infoOffsetVertical = 36;
CGFloat initialTextHeight = 50;

// Create textView with initial height
CGRect infoTextFrame = CGRectMake(textOffSetInColumn, infoOffsetVertical, infoTextWidth, initialTextHeight);
infoTextView = [[UITextView alloc] initWithFrame:infoTextFrame];
infoTextView.text = text;
[scrollView addSubview:infoTextView];

// Resize textView
CGFloat infoTextHeight = infoTextView.contentSize.height;
infoTextFrame = CGRectMake(textOffSetInColumn, infoOffsetVertical, infoTextWidth, infoTextHeight);
infoTextView.frame = infoTextFrame;

如果要更改TextView的大小并将其居中放置到上一个中心,可以使用以下代码:

   // Changing size of TextView and centering
    CGPoint center = self.categoryTextView.center;
    self.categoryTextView.frame = CGRectMake(_categoryTextView.frame.origin.x, _categoryTextView.frame.origin.y, _categoryTextView.frame.size.width, _categoryTextView.contentSize.height);
    self.categoryTextView.center = center;

而不是categoryTextView使用您自己的Outlet名称。