📌  相关文章
📜  列表视图中的颤动列不起作用 (1)

📅  最后修改于: 2023-12-03 15:36:52.191000             🧑  作者: Mango

列表视图中的颤动列不起作用

如果您使用列表视图作为应用程序的一部分, 您可能使用了一个名为“颤动列”的功能。在列表视图中,用户可以左右滑动显示出额外操作,比如删除。这个元素叫做“颤动列(page swiping)”,它本来是列表视图事件之一,可以在 UITableView 或 UICollectionView 上禁止或者开启。

然而, 在有些情况下,您可能会遇到问题,无论您在代码中怎样设置,也无法在列表中观察到颤动列的效果。本文将介绍如何解决这个问题。

常见的问题

以下几种情况中可能导致您的颤动列不工作:

  • 在 UITableViewCell 子类中自定义了布局。
  • 在 register() 方法中没有正确注册UITableViewCell。
  • 在 setEditing(_ editing: Bool, animated: Bool) 方法中没有正确地配置 UITableViewCell。
解决方法
1.正确的 UITableViewCell 子类(正确的布局)

当您自定义 UITableViewCell 子类时,您可以使用系统提供的默认布局(如下所示):

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
}

然而,如果您要添加额外的视图,则可以通过代码进行添加。如果添加了一个太大的 subview,它可能会压缩 UITableViewCell。如下所示的一个示例代码:

override func layoutSubviews() {
    super.layoutSubviews()
    mySubView.frame = CGRect(x: 0, y: 0, width: bounds.width, height: bounds.height)
    addSubview(mySubView)
}

在这样的情况下,颤动列不起作用!为了正确配置,您可以像下面这样更新代码:

override func layoutSubviews() {
    super.layoutSubviews()
    mySubView.frame = contentView.bounds
    contentView.addSubview(mySubView)
}
2. 为 UITableViewCell 正确注册

当使用 UITableView.register() 方法注册 UITableViewCell 类时,您应该使用正确的ReuseIdentifier。否则,由于 UITableViewCell 的重用机制,将可能导致颤动列的不正常工作。如下所示的代码可以说明这一点:

tableView.register(MyCustomCell.self, forCellWithReuseIdentifier: "reuseIdentifier") //right way

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") // wrong way

为了确保正确设置,您应该使用与归档时的 Identifier 相同的 Identifier。

3. 正确的 setEditing() 方法(调用 super)

在您的业务逻辑中,您可能会遇到需要调用 UITableViewCell 的 setEditing() 方法的业务场景。如果您没有通过 super.setEditing() 方法正确调用该方法,也可能导致颤动列不起作用。下面是一个标准的示例代码:

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)
    if editing {
        //do something
    } else {
        //do something
    }
}

通过 super.setEditing() 的调用,您可以确保所有的 UITableViewCell 事件和 UI 都正常工作。

结论

在列表视图中,颤动列是一项非常有用的功能。但是,有时可能需要额外的调试或者精心的配置方可达到预期的效果。通过上述建议,您可以正确设置 UITableViewCell,从而更方便地管理颤动列。