我如何设置我的UITableViewCell子类的子视图来使用自动调整大小的蒙版



我正在尝试为我的iOS应用程序实现一个网格(认为。net的DataGridView)。我使用一个UITableView与自定义UITableViewCell子类,其中我有几个标签代表每一列的数据为那一行。我的问题与在设备方向改变后调整这些标签的宽度有关。我基本上是想按比例调整它们的大小,例如,一个列在纵向方向占栅格宽度的1/3,当切换到横向方向时,它仍然占栅格宽度的1/3。

现在我通过重写我的UITableViewCell子类的- (void)layoutSubviews方法来实现这一点;我只是硬编码了iPad和iPhone的横向和纵向比例。然而,只有当网格本身在方向改变时按比例调整大小时,这才有效,当然情况并非总是如此。

为了实现在任何情况下都能工作的解决方案,我考虑在layoutSubviews方法中使用self.bounds.size.width,但似乎自动调整遮罩大小是更好的解决方案。如果我将每个UILabel的掩码设置为UIViewAutoResizingFlexibleWidth | UIViewAutoResizingFlexibleLeftMargin | UIViewAutoResizingFlexibleRightMargin,那么我应该实现我正在寻找的缩放类型。但是我不明白的是如何设置每个标签的初始帧。如果我不知道单元格的起始边界,直到layoutSubviews被调用,我怎么能安排我的子视图开始?

尝试使用self.contentView.bounds.size作为您的计算基础。例如:

int numberOfLabels = 3;
CGFloat marginHorizontal = 10;
CGFloat spacingHorizontal = 8;
CGFloat totalWidth = cell.contentView.bounds.size.width;
// That's how much is available to all labels 
CGFloat availableWidth = (totalWidth
                          - 2 * marginHorizontal
                          - (numberOfLabels - 1) * spacingHorizontal);
// That's how much each label gets - initially!
CGFloat labelWidth = availableWidth / numberOfLabels;

不要因为内容视图最初只有320的宽度而烦恼。它稍后会被调整大小,你的标签也会随之调整。

顺便说一下:你可能应该为左右边缘的标签指定不同的蒙版:
  • 左边框:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin
  • 右边框:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin

最新更新