【问题标题】:UITextView set width and height in heightForRowAtIndexPathUITextView 在 heightForRowAtIndexPath 中设置宽高
【发布时间】:2013-12-26 18:35:30
【问题描述】:

我有一个 UITextView,其中一个单元格包含一个 UILabel 和一个 UITextView。我正在尝试设置 textview 的宽度和高度。我在 heightForRowAtIndexPath 中执行此操作,但我的 UITextView 设置为在故事生成器中自动调整宽度。当 heightForRowAtIndexPath 被调用并且我发现我的 UITextView 它的宽度是在界面生成器中设置的值,而不是“重新调整大小”的宽度。

那么,我如何在自动调整大小后获得新的大小?我的 UITextVies 在 IB 中设置为 280,但是当我在 iPad 上显示它时,单元格宽度大于 280,但在 heightForRowAtIndexPath 中我仍然得到 280。

谁能告诉我在自动调整大小后如何获得正确的宽度。

更新:

为了澄清,我试图在单元格中设置 UITextView 的高度。我正在调用boundingRectWithSize,并传递了CGFloatMax 的高度,但我需要将宽度设置为UITextView 上的“新自动调整大小”宽度。我正在尝试弄清楚如何获得它。

更新:

这是我的自动调整大小的屏幕截图。我将 UILabel 和 UITextView 设置为相同的方式,宽度设置为增长。

感谢您的帮助

【问题讨论】:

  • 您确定您的单元格宽度设置为方法 heightForRowAtIndexPath 中设置的值吗?因为这个函数在创建单元格之前返回高度。
  • 在 heightForRowAtIndexPath 如果我得到 UITextView 并检查它的高度和宽度,它们是 IB 中设置的值。
  • 我再次说这个函数在创建单元格之前返回高度。
  • 正确,我发布了更新以澄清一点。我正在根据文本计算一个新的高度。这对 iPhone 非常有用,因为宽度固定为 280,并且非常完美,因为我将高度传递给 boundingRectWithSize CGFLOATMAX,宽度传递给 280。但是,在 iPhone 中,UITextView 会自动调整为更大的宽度。我需要那个宽度。
  • 发布自动调整 struts 和字符串大小的屏幕截图或使用 AutoLayout 时的约束。

标签: ios xcode uitableview interface-builder uitextview


【解决方案1】:

heightForRowAtIndexPath 它是UITableView 的委托方法,它定义了UITableViewCell 的高度。如果您已经使用 UITableView.rowHeight 方法或在 Storyboard 中设置了行高,并且您的行具有静态高度,则不需要实现它。

假设您的 UITextView 包含在 UITableView 中(否则行高和 textview 高度相关),请确保 @987654322 @ 是正确的。

【讨论】:

  • 我的身高是动态的。每个单元格中的文本都不同,因此我需要计算 heightForRowAtIndexPath 中每个单元格的高度。
  • 你能分享一些代码吗?如果单元格高度正确,则问题出在 autoresizingMask。如果单元格高度不正确,则可能是高度计算的问题。
  • 我可以发布一些代码,但我的高度计算是正确的,但我需要为 boundingRectWithSize 调用提供宽度,并且我不知道“新”当前宽度。那是我的问题。
【解决方案2】:

试试:

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

        NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:17.0]};
        CGRect rect = [self.textview.text boundingRectWithSize:CGSizeMake(textview_width, max_height) 
                                              options:NSStringDrawingUsesLineFragmentOrigin 
                                              attributes:attributes 
                                              context:nil];
return rect.size.height;
}

【讨论】:

  • 大声笑,这正是我想做的,但是,我不知道如何获得 Autosized 宽度。
【解决方案3】:

我以另一种方式做到了这一点,因为没有人能够提供更好的解决方案。我得到了屏幕宽度并重新计算了我的 UITextView 的位置。我还必须删除 UITextView 的自动调整大小设置。

【讨论】:

  • 在屏幕截图中,自动调整大小的蒙版不正确,正如我们许多人所建议的那样。但是您只是“想出了”如何解决它,因为没有人能够提供“更好”的解决方案... sigh
  • 嗯,我确实尝试过更改自动调整大小的掩码,但它似乎对我在 heightForRowAtIndexPath 方法中获得的大小没有任何影响。在查看了 google 和其他堆栈溢出帖子后,我得出的结论是,也许我在问一个愚蠢的问题,因为没有示例或帖子对单元格视图中 UITextView 或 UILabel 动态文本高度计算的宽度有任何引用。
猜你喜欢
  • 2012-08-08
  • 2013-01-01
  • 2014-07-05
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
相关资源
最近更新 更多