带标签的动态 TableView 标题视图

Posted

技术标签:

【中文标题】带标签的动态 TableView 标题视图【英文标题】:Dynamic UITableViewHeader View with Label 【发布时间】:2017-02-20 10:30:25 【问题描述】:

我在.xib 文件中有一个UIView,我在运行时加载它并将其设置为UITableView 的tableHeaderView。我的 xib 文件中有一个UILabel,它可以动态增长,底部固定为UIButton

如果我将UILabel 的宽度设置为固定宽度,它会起作用。

如果我在UILabel 上设置前导/尾随,那么它不起作用:(

我正在使用下面的代码来处理 headerView 的高度

-(void)viewDidLayoutSubviews 
[super viewDidLayoutSubviews];

// Dynamic sizing for the header view
if (table.tableHeaderView) 
    UIView *headerView = table.tableHeaderView;
    float height = [headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
    CGRect headerFrame = headerView.frame;

    // If we don't have this check, viewDidLayoutSubviews() will get
    // repeatedly, causing the app to hang.
    if (height != headerFrame.size.height) 
        headerFrame.size.height = height;
        headerView.frame = headerFrame;
        table.tableHeaderView = headerView;
    


谁能解释为什么设置前导/尾随不起作用? 我的约束视图是这样的(没有固定宽度):

【问题讨论】:

您是否为标签设置 numberOfLines = 0? 显然有效。首先添加您的约束,然后只有我们才能确定问题所在。 你能展示你的整个代码吗? @VishalSonawane 是的。约束已经存在,添加了图像。我的班级没有更多的代码,只有另外一种方法可以将文本设置为标签。 嗨@Husyn 我遇到了确切的情况。我已经通过正确设置约束来解决它。我遇到了一个问题,因为为按钮添加了错误的约束为“使用超级视图垂直居中”。请检查一次您的约束是否正确 【参考方案1】:

在 viewDidLayoutSubviews 结束时调用。

[viewWithLabelAndButton setNeedLayout]; [viewWithLabelAndButton layoutIfNeeded];

【讨论】:

我想你以编程方式创建 UIView,因为可能是这种情况 - xib 的错误,但我看到你的约束安装正确。另一个尝试的案例 - 在 xib 中增加超级视图 UILabel 的高度。苹果在 xib 中使用了有趣的机制,并且视图每次都不会得到很好的大小。祝你好运!

以上是关于带标签的动态 TableView 标题视图的主要内容,如果未能解决你的问题,请参考以下文章

具有动态高度的自定义视图作为 UITableView 标题 ios xcode

动态增加 UILabel & TableView Cell 的高度?

带数组的 TableView (Objective-C)

Calendar Kal:如何动态刷新 tableview?

Swift 2:从单独的标签栏控制器更新 TableView

带部分的 tableview 搜索栏