根据调整大小标签调整UITableViewCell高度

时间:2016-02-03 12:15:53

标签: ios uitableview autolayout uilabel

我有自定义UITableViewCell。在UITableViewCell的contentView我添加了一个UIButton及以下按钮,有一个UILabel(Button和UILabel是彼此的兄弟姐妹)。

在开始时UILabel上没有文字,所以它的高度约束被设置为> = 0.但是当我点击按钮时,我设置UILabel的文本属性,它应该成为可见。换句话说,我想扩展UILabel的高度,并且还应该扩展UITableViewCell的高度。

我已将UIButton Top,LeadingTrailing边缘固定到UITableViewCell contentView,同样我已将UILabel的Bottom,Leading和{{1}固定住了} edge到Trailing contentsView。

现在的问题是,当我点按UITableViewCell时,它不会调整UITableViewCell的大小,也不会调整UILabel

这是

的代码
UITableViewCell

类似地

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


  MYCustomCell *cell = (MYCustomCell *) [tableView cellForRowAtIndexPath:indexPath];
  cell.descriptionLbl.text = @"This is my text";
  [cell layoutSubviews];
}

以下是我的自定义单元格的layoutSubViews

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {

  MYCustomCell *cell = (MYCustomCell *) [tableView cellForRowAtIndexPath:indexPath];
  cell.descriptionLbl.text = @"";
  [cell layoutSubviews];
}

请注意,我没有在任何地方设置- (void) layoutSubviews { [super layoutSubviews]; self.descriptionLbl.preferredMaxLayoutWidth = CGRectGetWidth(self.contentView.bounds); self.descriptionLbl.numberOfLines = 0; [self.descriptionLbl sizeToFit]; if (self.descriptionLbl.text.length > 0){ self.descriptionLbl.frame = CGRectMake(self.descriptionLbl.frame.origin.x, self.descriptionLbl.frame.origin.y, self.descriptionLbl.frame.size.width, 50); // Here the size will be calculated more accurately later } } 的高度。

4 个答案:

答案 0 :(得分:1)

在您的情况下,当只有按钮可见时,您将手动管理自动布局约束,并且在单击文本后将可见。 我准备了一个你可以在这里找到的演示。

<强> https://github.com/rushisangani/TableViewCellExpand

请参阅TableViewCell的故事板约束并明智地管理它。

答案 1 :(得分:0)

最终你需要做你的-viewdidLoad

Sub GroupAllShapes()

    Dim arrShapeNames()     As Variant 'must be Variant to work with Shapes.Range()
    Dim shp                 As Shape
    Dim sr                  As ShapeRange
    Dim ws                  As Worksheet
    Dim i                   As Integer

    Set ws = ActiveSheet

    ReDim arrShapeNames(ws.Shapes.Count - 1)
    i = 0
    For Each shp In ws.Shapes
        arrShapeNames(i) = shp.Name
        i = i + 1
    Next

    Set sr = ws.Shapes.Range(arrShapeNames)
    sr.Group

    Set sr = Nothing
    Set ws = Nothing

End Sub

UITableViewAutomaticDimension 表示您的手机高度是动态的, setEstimatedRowHeight 可以计算您的滚动高度

答案 2 :(得分:0)

在表格视图单元格中设置动态大小的视图时,正确设置所有约束非常重要。开发人员最常犯的错误是忽略单元格底部的垂直约束。

要获得有关如何在自定义UITableViewCells中设置动态调整大小的UILabel的更详细说明,请查看我写的here帖子。

答案 3 :(得分:0)

Swift 2.0:

添加此内容:

override func viewDidLoad() {
    super.viewDidLoad()    
    self.tableView.estimatedRowHeight = 80
    self.tableView.rowHeight = UITableViewAutomaticDimension
    }

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

        self.tableView.estimatedRowHeight = 80
        self.tableView.rowHeight = UITableViewAutomaticDimension
}

如果是表视图控制器,请使用:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
self.tableView.setNeedsLayout()
self.tableView.layoutIfNeeded()
}