根据行数更改UITableView的大小

时间:2017-10-26 13:37:45

标签: ios swift uitableview

目前我正在使用tableView从搜索功能中检索数据。所以现在我希望tableView根据我们获得的数据量来缩小。

所以这是结果很多的时候,它填满了tableView:

enter image description here

这就是我们只得到两个结果的时候。

enter image description here

所以我用了

 tableView.tableFooterView = UIView(frame: CGRect.zero)

并设法隐藏了insets,但没有隐藏tableView的大小。是否可以根据加载数据的单元格数量实际缩小tableView的大小?

1 个答案:

答案 0 :(得分:0)

不是不断更新表格视图的大小,而是将表格视图的背景设置为.clear并将单元格的背景颜色设置为灰色可能更容易。如果您希望触摸传递到表视图透明的基础视图,您可以继承UITableView并覆盖point(inside:,with:),如:

class TransparentTableView: UITableView {
    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        return self.indexPathForRow(at: point) != nil
    }
}

如果单元格位于该位置,则会导致触摸事件注册为位于表格视图内,从而有效地将表格视图的大小更改为单元格所占据的位置。

然后在您的storyboard或xib中将UITableView的类更改为您的子类(在我的示例中为TransparentTableView)。

更新

point(inside:,with:)确定触摸事件是否应被视为“内部”,因此由视图处理。默认情况下将映射到视图的边界。但是,对于我们来说,我们不希望处理表视图中的所有触摸事件仅限于存在单元格的位置。要检查某个单元格是否位于特定位置,我们可以调用indexPathForRow(at:)如果它返回索引路径,我们知道如果它返回nil则会有一个单元格,我们知道没有单元格。因此,只要self.indexPathForRow(at: point) != nil

,我们就会考虑内部一点