【问题标题】:Static table view cell's height in xib not being applied未应用 xib 中的静态表格视图单元格的高度
【发布时间】:2012-02-11 18:13:53
【问题描述】:

我在 .xib 中创建了一个静态表格单元格,但是当它显示时,未应用在 xib 中设置的单元格高度,而是以看起来像单元格的默认高度显示的单元格。

我的设置如下:

1) 表格视图控制器派生自 UITableViewController

2) TVC 不包含在 xib 中,而是在应用程序委托中的代码中创建并添加到选项卡栏控制器。

3) TVC 是使用 initWithNibName:bundle: 创建的,nib 名称作为包含表格视图和静态表格单元格的 xib 名称提供。

4) TVC 有一个 UITableViewCell* 类型的 IBOutlet iVar

5) cellForRowAtIndexPath 返回此 iVar。

6) numberOfRowsInSection 返回 1,numberOfSectionsInTableView 返回 1;

7) xib 包含一个表视图,它连接到文件所有者的视图。文件的所有者设置为我的自定义表格视图控制器类。

8) xib 中的 UITableViewCell 连接到 File's Owner 中 UITableViewCell 类型的 outlet。

9) xib 中的表格视图样式设置为分组。

10) 大小检查器中显示的 Table View Cell 的大小为 N,这就是问题所在。如果我手动更改 N 或通过调整单元格视觉表示的大小,则在绘制表格时不会应用此大小。我还尝试在尺寸检查器中设置视图框架矩形高度以匹配。 N 的大小无关紧要。

11) 单元格的高度没有在 TVC 中的任何位置设置,如果我使用 self.tableView.rowHeight 设置它,那么它的高度确实会改变。但我不想像这样明确设置,我希望 xib 中的高度大小被拾取。

这几天让我发疯了,并且阅读了几篇关于表格视图的教程(包括 Apple 的表格视图编程指南,尤其是关于静态单元格的部分,我首先按照其说明进行了设置)没有给我任何线索,问题出在哪里。

TIA

【问题讨论】:

    标签: ios


    【解决方案1】:

    实现heightForRowAtIndexPath 并返回链接到您的IBOutlet 中的UITableViewCell 的高度。

    【讨论】:

    • 谢谢。这样可行。这是一种解决方法还是您应该使用带有 .xib 的静态单元格的方式 - 正如我一直在查看的教程中没有提到的那样。
    • 我不是 100% 确定,因为我现在主要使用 UIStoryboards,它似乎可以更好地处理静态单元格,但当然该方法是控制行高的正确方法,如果你是以这种方式从 XIB 加载 tableviewcell,我没有看到更好的选择。
    • 你怎么知道它是哪个笔尖?
    【解决方案2】:

    您的 UITableView 委托中是否定义了 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

    你可能想要这样的东西:

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return 30;
    }
    

    如果您仍然遇到问题,请尝试此帖子:Setting custom UITableViewCells height

    【讨论】:

    • 提问者正在寻找 XIB 来控制高度,而不是通过编程设置。
    • 谢谢,但我不需要,但我不应该这样做吗?我读过的许多资料都说单元格的高度可以在 xib 中设置,如果我实现这个功能,我会以编程方式设置它,这就是我说我不想做的。
    【解决方案3】:

    我遇到了同样的问题,这里和其他线程上的每个人都建议编写代码来解决问题,这似乎是错误的。如果您必须编写代码才能获得正确的属性,那么使用 IB 有什么意义?

    答案很简单,但花了一点时间才找到。在 IB 中有两个地方可以设置行高(就像在代码中有两个地方可以设置它一样)。一个在桌子上,另一个在单元格上。

    我(错误地)设置它的地方是属性检查器中 tableViewCell 的“行高”属性。更改此值对运行时的行高没有影响。

    然后我找到并设置了 TableView 的“行高”属性(对象层次结构的上一级)和中提琴,行高在运行时是正确的。一旦这工作,我关闭了 TableViewCell 上的行高覆盖(取消选中行高属性上的“自定义”)。我担心这可能会在每个单元格上进行评估,这会降低性能,因为我所有的单元格都具有相同的高度。

    【讨论】:

    • 这里的问题是,如果您有不同的自定义单元格,您需要为所有单元格设置高度。
    猜你喜欢
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    相关资源
    最近更新 更多