如何设置UITableViewCell子类的子视图以使用自动调整蒙版?

时间:2011-12-16 17:42:07

标签: ios uitableview autoresizingmask

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

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

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

1 个答案:

答案 0 :(得分:0)

尝试使用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