修改单元格子视图的框架

Modify frames of the cell's subviews

我的 table 视图由带有多个子视图的自定义单元格组成。
让我们调用其中两个子视图 AView 和 BView。它们并排放置。
有些情况下我不想显示 BView(我将其隐藏)。但这意味着我应该使 Aview 的宽度增加 BView 的宽度。

我试图在数据源的 - tableView:cellForRowAtIndexPath: 方法中更改 AView 的框架。没有结果。然后我试图在我的代表的 – tableView:willDisplayCell:forRowAtIndexPath: 中更改它。又失败了。
在这两种情况下,AView 的大小都与 Storyboard 中的大小相同。

那么,AView的frame应该在哪里修改呢?

您可以通过多种方式做到这一点。我认为非常干净的一个建议是:

  1. 子类 UITableViewCell...例如将其命名为 MyCell。
  2. MyCell 中创建一个 IBOutlet 链接到 BView 的宽度限制。将其命名为 BViewWidthConstraint。
  3. MyCell中创建以下函数:

    func hideBView() -> void {
        self.BViewWidthConstraint.constant = 0
    }
    
  4. cellForRowAtIndexPath 中,您现在可以:

    if needToHideBView {
        cell.hideBView()
    } 
    

我假设您正在使用 Autolayout 并且设置正确!