成组的UITableView和水平边距



我有一个分组的UITableView,它在iPhone的纵向模式下看起来很好看。它的单元格子视图设置了自动缩放功能,以便在横向模式下拉伸,但这会使它在美学上不那么令人愉快——单元格看起来太宽了,不适合它们的内容。

我现在正在把它打造成一个通用的应用程序,但在iPad上,自动缩放会导致更大的拉伸,看起来简直无法接受。

如果我能让UITableView的单元格组有一个固定的宽度(或最大宽度),或者我能以某种方式控制水平边距,那将是理想的。

由于在UITableView中没有找到对此的支持,我已经做了一些快速的尝试,将其子类化以在布局时限制其大小,并且作为一种替代方案,引入容器视图以使UITableView仅在垂直方向上自动resize。这两种方法都有效,但都产生了新的问题:在页边空白处滑动时滚动不起作用,我现在被迫使UITableView的背景透明(这与苹果的建议背道而驰),因为UITableView框架和页边空白之间的背景不连续。

有人找到解决我的问题的技巧吗(即在UITableView中限制组的宽度,导致页边距扩展以填充视图的宽度),或者找到开源解决方案吗?

好消息!我终于找到了一种只需微小的代码更改就能令人满意地实现这一点的方法:

  • 根据本文的解决方案,通过子类化UITableViewCell和覆盖-setFrame来缩小单元格:
    如何以分组样式设置UITableView中单元格的宽度
  • 为了添加垂直填充,使用UITableView的contentInset属性(继承自UIScrollView)效果非常好

您可以始终保留标准表视图,并为表视图单元格提供带有透明边的自定义背景,使其看起来比实际情况更小。

Cocoa With Love有一篇关于如何做到这一点的好文章:简单的自定义UITableView绘图。

这篇文章的基本要点是,您需要制作六个不同版本的背景,并在tableView:cellForRowAtIndexPath:请求单元格时提供正确的背景。您将需要一个在顶部有圆角的(用于截面的第一行),一个在底部有圆角(用于截面底部的一行),以及一个四个角都是圆角的(适用于截面中只有一行的情况)。然后,您将需要相同的三个,但为每行的"选定"版本进行自定义。

最新更新