如何修改heightForRowAtIndexPath以便调整其中textview的高度,还可以在textview为空时保持最小高度?

时间:2016-10-16 14:49:12

标签: ios swift uitableview heightforrowatindexpath

我有一个带有静态单元格的tableView。一个单元格包含地图UITextView和其他控件:

enter image description here

此textview具有以下限制:

enter image description here

到目前为止,我将heightForRowAtIndexPath设置为此单元格的静态值:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
{
    if indexPath.row == 0 {
        return 311;
    }
}

但是当文本较长时,textview - 而不是增长 - 包含内部文本,用户必须滚动它。 基本上它总是311高。我想改变它,以便整个单元格适应textView内容。

我尝试将return 311更改为return UITableViewAutomaticDimension,但是当没有文字时,单元格会缩小,右侧的控件也不可见。

所以我的问题是 - 如何根据里面的文字设置单元格的动态高度,还要保持311的最小高度?

3 个答案:

答案 0 :(得分:1)

为文本视图添加高度约束> =最小值(单元格为311时的值,然后将单元格高度设置为自动。

答案 1 :(得分:1)

如果您只是显示文本而不是以任何方式编辑它。你应该尝试使用UILabel,如果正确添加约束,UITableViewAutomaticDeminsions将按预期工作。

您可以做的是向textView添加高度约束,然后根据您获得的字符串大小增加其大小。当然你也需要调用layoutIfNeeded! UITableViewAutomaticDimensions应该处理剩下的事情。

答案 2 :(得分:0)

我不完全理解你的问题,但根据你的说法,这可能有用:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if UITableViewAutomaticDimension > 311 {
            return UITableViewAutomaticDimension
    }
    else {
       return 311
   }
}

我只是检查单元格是否应该大于最小值311,然后返回最小值或更大值