Autolayout UILabel 高度在第二个视图外观上发生变化

Posted

技术标签:

【中文标题】Autolayout UILabel 高度在第二个视图外观上发生变化【英文标题】:Autolayout UILabel height changes on second view appearence 【发布时间】:2014-04-10 09:00:38 【问题描述】:

我在 TableHeaderView (see this question) 中有一个动态 UILabel,一切都很好,但是如果我将标签的文本设置为 nil@"",标签会保持它的高度大小有文本的时候。

我正在更改另一个 viewController 中的文本,我是 presenting modally。所以我想分三步向你展示:

原始状态

设置文字为@""

在这一步中,我展示了 viewController 以删除文本,然后我关闭 viewController 以返回此视图。

重新显示此视图

所以我必须打开正在编辑的 viewController 才能再次将其关闭。然后就像我想要它一样..:

任何想法为什么?我在 viewWillAppear 方法中像这样重新调整 TableViewHeader 的大小:

- (void)resizeTableViewHeader

    //GET THE SIZE OF THE CONTAINER
    CGSize fittingSize = [self.header systemLayoutSizeFittingSize: UILayoutFittingCompressedSize];
    self.header.frame = CGRectMake(0, 0, 320, fittingSize.height);
    self.tableView.tableHeaderView = self.header;

知道为什么我必须访问 View 两次吗?

【问题讨论】:

在创建 UIlabel 时将高度设置为最小高度,当 uilabel 包含文本时,它将自动调整其高度。试试吧。 我正在这样做并且它有效,但是当视图重新出现时它不是 【参考方案1】:

也许它需要在某处更新约束,或者layoutIfNeeded。其他解决方案可以在我的另一个answer中找到。

【讨论】:

我的 macbook 没有自动取款机。我可以在 UILabel 上调用 layoutIfNeeded 吗? 我想它需要放在视图层次结构的上方,但你可以试一试。【参考方案2】:

你应该实现 tableViewDelegate 方法并计算标题高度。

- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

    CGFloat height = //Calculate the dynamic height.
    return height;

【讨论】:

这不是关于表格部分标题,而是关于整个表格视图标题。 (检查 tableHeaderView)

以上是关于Autolayout UILabel 高度在第二个视图外观上发生变化的主要内容,如果未能解决你的问题,请参考以下文章

IOS - UIView中使用AutoLayout的UILabel动态高度

如何使用 AutoLayout 使我的 UIImage 的高度与我的 UILabel 的固有高度相同?

AutoLayout动态调整UILabel高度和宽度

AutoLayout 在地图标注中动态调整 UILabel 高度和宽度?

markdown UIScrollView中的动态UILabel高度与Autolayout

基于UILabel的UICollectionViewCell AutoLayout动态高度