0

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

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

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

4

1 回答 1

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
于 2012-01-24T23:53:52.563 回答