确定分组自定义单元格的 UITableViewCell 宽度的正确方法?

Posted

技术标签:

【中文标题】确定分组自定义单元格的 UITableViewCell 宽度的正确方法?【英文标题】:Proper way to determine UITableViewCell width for grouped custom cells? 【发布时间】:2011-07-10 19:48:30 【问题描述】:

我有一个通过代码(不是 Interface Builder)创建的自定义 UITableViewCell。我有依赖单元格宽度的子视图:有一个标签总是需要在单元格的右边缘内。单元格显示在分组的表格视图中。

我最初对这些值进行了硬编码以用于 iPhone,但现在我将应用程序转换为通用二进制文件,并且硬编码的数字已用于 iPad 上的分组表视图。

是否有正确的方法来获取单元格的宽度?框架返回全屏宽度,这使我的标签不合适。还是我应该硬编码两组值,一组用于 iPhone,一组用于 iPad?

任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

这些似乎都不适合我;我在 xib 中定义了一个自定义单元格,左侧边缘有一个图形(iPhone 上为 20px),在 iPhone 上看起来不错。但在 iPad 上,图形与左侧分组部分边框重叠!为了修复它,我在图像的水平空间约束(前导)上设置了一个出口,然后在 UITableViewCell 子类的代码中对其进行了调整:

- (void)setFrame:(CGRect)frame 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
        self.leadingSpaceConstraint.constant = 40;
    
    [super setFrame:frame];

然后摆弄数字直到差距刚刚好。 :)

我意识到 setFrame: 可能不是这段代码的理想位置,但它有效 - 所以它留下了。

【讨论】:

【参考方案2】:

您应该能够从单元格的contentView 子视图中获取适当的尺寸。但是你通常应该在你的子视图上设置尺寸和自动调整大小的掩码,这样无论最终的具体宽度是多少,单元格都会正确显示。

【讨论】:

谢谢,这是我的问题。我使用 cell.frame 而不是 cell.contentView.frame 进行计算。

以上是关于确定分组自定义单元格的 UITableViewCell 宽度的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义 UITextView 单元格的 TableView 将导航栏滚动到屏幕外

iOS 6 自定义分组 UITableViewCell 大小不正确

样式化分组的静态 TableView [关闭]

使用图像设置 backgroundView 时缺少分组的 UITableView 的单元格分隔符

iOS:自定义表格视图单元格中的约束

如何动态更改自定义单元格的表格视图单元格的高度?