基于UITextView的自动调整大小单元格

时间:2015-01-11 03:08:40

标签: ios objective-c uitableview uitextview

我在故事板中的UITableViewCell中有一个UITextView。然后我在UITextView的所有4个边上添加了一个约束。

在下面的代码中,我尝试在用户输入文本时动态更改textView。我很确定这是成功的。但问题是细胞不是。贝娄是我试过的代码,没有成功。

-(void)viewDidLoad
{
    tableView.rowHeight = UITableViewAutomaticDimension;
    tableView.estimatedRowHeight = 44;
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if (textView == myTextView)
    {
        [self textViewFitToContent:myTextView];

        [self.tableView beginUpdates];
        [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForItem:1 inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
        [self.tableView endUpdates];
    }
    return YES;
}

- (void)textViewFitToContent:(UITextView *)textView
{
    CGFloat fixedWidth = textView.frame.size.width;
    CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
    CGRect newFrame = textView.frame;
    newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
    textView.frame = newFrame;
    textView.scrollEnabled = NO;
}

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

{
    return myTextView.frame.size.height + 40;
}

我是初学者,所以请不要对我太苛刻。

由于

3 个答案:

答案 0 :(得分:0)

你的代码很好,完美无瑕,做得很好。在没有看到声明的变量的情况下,我认为单元格没有调整大小的原因是因为你的heightForRowAtIndexPath方法正在返回错误UITextView的高度。您应该使用txtSymptoms代替myTextView,而不是tableView,而当用户编辑文本时,会触发{{1}}重新加载

答案 1 :(得分:0)

你的这个片段:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return myTextView.frame.size.height + 40;
}

从代码的其余部分开始,myTextView似乎是一个特殊的文本视图,您正在为其添加文本和调整大小,但此方法使用更大的高度来调整大小,这就是为什么 all

答案 2 :(得分:-1)

在故事板中,选择文本视图,然后在尺寸检查器中查找内容拥抱优先级选项。 内容拥抱优先级的范围为0到1000.

保持文本视图(特别是垂直部分)的内容拥抱优先级高于文本视图所在单元格的内容视图的内容拥抱优先级。