【问题标题】:Auto Size cell based on UITextView基于 UITextView 的自动大小单元格
【发布时间】:2015-01-11 03:08:40
【问题描述】:

我在情节提要的 UITableViewCell 中有一个 UITextView。然后我在 UITextView 的所有 4 个边上添加了一个约束。

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

-(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;
}

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

谢谢

【问题讨论】:

  • 当只有一个单元格应该改变高度时,所有单元格都会改变高度。

标签: ios objective-c uitableview uitextview


【解决方案1】:

你的代码很好,事实上完美无缺,而且做得很好。在没有看到您声明的变量的情况下,我相信单元格未调整大小的原因是因为您的heightForRowAtIndexPath 方法返回了错误UITextView 的高度。您应该使用myTextView,而不是txtSymptoms,它不会在调整大小代码的其他任何地方使用,当用户编辑其文本时,将触发tableView重新加载。

【讨论】:

  • 这是我的错。我以为我在堆栈溢出中更改了所有 textViews 名称。我想我忘记了那个。但我认为这不是问题
  • 所有 textViews 都会自行调整大小。这很奇怪
【解决方案2】:

你的这个sn-p:

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

从您的其余代码来看,myTextView 似乎是一个特殊的文本视图,您正在向其中添加文本并调整其大小,但此方法使用较大的高度来调整大小,这就是 all 的原因的细胞长得更高。

【讨论】:

  • 有没有办法解决这个问题?
  • 我刚把它拿走了,当我换行时,textView 会在瞬间正确调整自己的大小,然后恢复到之前的设置。我认为这是因为单元格高度没有改变,我使用了自动约束
【解决方案3】:

在情节提要中,选择您的文本视图,然后在尺寸检查器中查找内容拥抱优先级选项。 内容拥抱优先级的范围可以从 0 到 1000。

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

【讨论】:

  • 我不太明白
猜你喜欢
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多