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 高度和宽度?