在uitableview之前查看动态UILabel大小

时间:2016-07-03 16:47:30

标签: ios swift dynamic autolayout uilabel

我在尝试使这个帖子描述标签根据IOS9上的内容大小增长和缩小时遇到了麻烦。我有一个视图(我将它引用topView),我用作tableview的标题(所以当我向上滚动标题消失)。在topView中,有一堆堆栈视图。我希望根据内容大小增加和缩小帖子描述标签的高度。我知道如何在简单的情况下完成所有操作,其中所有内容都在原型单元格内(即设置估计行高并设置uitableviewautomaticDimensions,在标签上设置sizetoFit并将行数更改为0)。但是,这是一种不同的情况,因为帖子描述标签实际上不在单元格内部,它在表格视图单元格之前的视图中。

请注意,除了postdescription标签之外,视图中的所有项目都具有静态高度。帖子描述标签位于仅左右固定的堆栈视图内(因此顶部和底部会增长?)。此外,包含所有元素的主堆栈视图固定在四个侧面,顶视图包含主堆栈视图,也固定在四个侧面。通过这种设置,我希望topview能够根据内容大小增长和缩小。但是,我没有在输出中看到。我不知道是不是堆栈视图持有标签拒绝增长或顶视图拒绝增长为标签的stackview提供更多空间。感谢

dynamic uilabel

更新

谢谢Riadluke,我尝试按照建议做的事情,即在计算所需高度后调整headerview的大小。我在viewDidLayoutSubview中放置了以下代码,它可以解决问题

postDescriptionLbl.sizeToFit()


let headerView = commentTableView.tableHeaderView!

headerView.setNeedsLayout()
headerView.layoutIfNeeded()

let height = TopStackView.frame.size.height + ImageStackView.frame.size.height + postDescriptionLbl.frame.size.height + SpacerStackView.frame.size.height + BottomStackView.frame.size.height
 headerView.frame.size.height = height
commentTableView.tableHeaderView = headerView

我现在使用此方法的问题是,当视图控制器出现时,我可以实际看到postDescription标签高度从故事板中的默认高度增长到所需高度。例如,当VC首次出现时,我看到一行标签,其中一些字符串被切断,但是在0.5秒之后,标题视图和标签增长到我想要的大小。我知道这是预期的,因为我在viewDidLayout Subview之后调用了操作。我想知道是否有更好的方式,以至于我没有看到过渡,并且视图看起来是正确的高度。 IE浏览器。让视图确切地知道标签有多高,以确定在出现在屏幕上之前标题视图需要多高?

2 个答案:

答案 0 :(得分:0)

我担心设置为tableHeaderView的{​​{1}}的视图无法自动调整大小。它的高度将固定在IB中的高度。 您需要做的是手动设置其大小,然后将其重新指定为tableHeaderView,以便以您想要的高度显示。

由于您使用自动布局,因此只需几行。 您可以在设置标题视图的内容后立即尝试此代码:

UITableView

答案 1 :(得分:0)

经过多次尝试后,我无法使用原始设置。我实现的最好的是在视图确实出现之后调整它的大小,因为你看到之前的布局是不明智的。

现在正采用完全不同的方法。我创建了两个原型单元,并有一个作为" HeaderViewCell"并实现了以下功能

commentTableView.estimatedSectionHeaderHeight = 400
commentTableView.sectionHeaderHeight = UITableViewAutomaticDimension
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

之后的一切都像是一种魅力。