UITableView contentInset 使表格视图除了垂直滚动外还水平滚动

Posted

技术标签:

【中文标题】UITableView contentInset 使表格视图除了垂直滚动外还水平滚动【英文标题】:UITableView contentInset makes table view scroll horizontally in addition to vertically 【发布时间】:2013-04-28 07:22:48 【问题描述】:

我正在代码中创建一个 UITableViewController 并将其推送到导航堆栈的顶部。 它的表格视图旨在仅显示一个简单的文本项目列表。

我需要在我的 UITableViewController 的 init 方法中添加一些 contentInset 到我的表格视图中

self.tableView.contentInset = UIEdgeInsetsMake(7.0f, 5.0f, 7.0f, 5.0f);

但是,当我加载表格视图时,左右 contentInset 似乎实际上将我的表格视图的宽度拉伸了 10。我现在看到了一个小的水平滚动区域。我不想在我的表格视图上进行任何类型的水平滚动。如果我删除 contentInset 代码,我的表格视图的行为很简单,即只提供垂直滚动。我怎么能保持这样,但我的 contentInset 就位?我尝试在 viewWillAppear 中将 contentSize.width 减小 10,但没有效果。

这似乎是重复的,但没有可接受的答案:UITableView ContentInsets scrolling content horizontally

在模拟中,我用虚线标记了所需的 contentInset ---

谢谢。

【问题讨论】:

你是想达到在表格视图周围有边框的效果吗? 是的,完全正确。我会添加截图... 边框让我思考.. 我尝试使用 tableView.layer 设置边框颜色和宽度,但是,我丢失了单元格边框,因为 tableView 边框覆盖在上面。有什么干净的方法可以让它像模拟一样工作吗?感谢阅读! 在容器视图中添加表格视图会产生您想要的效果吗? 我希望插图也可以滚动。我目前设置它的方式是使用 UITableViewController 作为整个 VC。如果我能让 contentInset 工作,那就太棒了!目前右边的插图出现在屏幕外。 【参考方案1】:

我最终只设置了顶部和底部插图。为了实现左右插图的外观和感觉,我创建了与屏幕一样宽的自定义单元格。但实际的单元格内容仅限于自定义单元格内的一个稍窄的子视图。因此,子视图的左右两侧都有剩余空间。

【讨论】:

它可以工作,直到你有一个不会像你的单元格那样插入的节标题。当然你可以对你的标题做同样的技巧,但它开始感觉不正确。【参考方案2】:

看起来你需要做两件事:

    将表格视图添加到容器视图中,并使表格视图frame 变薄(以添加左右边框)。 只为顶部和底部添加contentInset

【讨论】:

感谢您的回复。我不得不将 UITableViewController 子类化,因此在其视图(tableView)中添加一个容器似乎太复杂了。我通过自定义单元格视图获得了视觉插图。【参考方案3】:

也许你应该将scrollView 的bounces 属性设置为YES。 并且不要设置 contentInset。

【讨论】:

你不应该使用 contentInsets 来生成边框,如果这样做,你的边框会显示在视图之外!【参考方案4】:

另一种可行的方法是,您可以为单元格的 contentView 设置框架,而不是设置 tableView 框架,就像这样,

- (void) layoutSubviews

    [super layoutSubviews];

    CGRect frame = self.contentView.frame;
    frame.size.width = frame.size.width * 0.9; //90% of total width
    frame.origin.x = self.center.x - (frame.size.width/2); //center the contentView
    self.contentView.frame = frame;

使用上述方法,您可以添加单元格所需的任何左侧或右侧或左侧填充。并且所有子视图都将添加到 contentView ,因此那里没有问题。

编码愉快..!

【讨论】:

以上是关于UITableView contentInset 使表格视图除了垂直滚动外还水平滚动的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 在 contentInset 之后不滚动

ContentInsets 不适用于 UITableView

UITableView 调整 contentinset 直到第一次滚动

iOS 7 中 UITableView 的 contentInset 规则?

通过 contentInset 属性添加边距在 iPad 上居中 UITableView?

更改 UITableView 的 contentInset 而不更改其 contentOffset?