【发布时间】:2015-03-20 16:52:02
【问题描述】:
我有一个 UIView 子类,其中包含一个多行 UILabel。此视图使用自动布局。
我想将此视图设置为UITableView 的tableHeaderView(不是节标题)。此标题的高度将取决于标签的文本,而标签的文本又取决于设备的宽度。这种场景自动布局应该很擅长。
我已经找到并尝试了 many many solutions 以使其正常工作,但无济于事。我尝试过的一些事情:
- 在
layoutSubviews期间在每个标签上设置preferredMaxLayoutWidth - 定义
intrinsicContentSize - 正在尝试确定视图所需的大小并手动设置
tableHeaderView的框架。 - 在设置标题时向视图添加宽度约束
- 一堆其他的东西
我遇到的各种故障:
- 标签超出视图的宽度,不换行
- 框架高度为0
- 应用程序崩溃,异常
Auto Layout still required after executing -layoutSubviews
该解决方案(或多个解决方案,如有必要)应该适用于 iOS 7 和 iOS 8。请注意,所有这些都是以编程方式完成的。我已经设置了一个small sample project,以防你想破解它来查看问题。我已将我的努力重新设置为以下起点:
SCAMessageView *header = [[SCAMessageView alloc] init];
header.titleLabel.text = @"Warning";
header.subtitleLabel.text = @"This is a message with enough text to span multiple lines. This text is set at runtime and might be short or long.";
self.tableView.tableHeaderView = header;
我错过了什么?
【问题讨论】:
-
我对你现在拥有的东西有什么问题感到困惑?截图看起来不错……
-
对于截图,我手动在标题上设置了一个框架。
-
@BenPackard 我也为此苦苦挣扎了一段时间,据我所知,不可能让
tableHeaderView尊重自动布局。最终,我在包含所有内容的标题视图中添加了一个额外的视图。在表格视图的超级视图的layoutSubviews中,我抓取了包装器的大小并手动设置了tableHeaderView的框架。 -
@AnthonyMattox 这似乎比我自己的解决方案差。我无法让它工作。你能提供更多信息吗?具体来说,你在
layoutSubviews中做什么来计算必要的大小? -
@BenPackard 我可能有点不对劲。在我遇到的情况下,表格标题视图中正在进行更多自定义布局,因此它可能是偶然的。我想出一个干净的工作示例,但
tableHeaderView非常挑剔。
标签: ios uitableview uiview autolayout nslayoutconstraint