59

问题描述:iOS 7 在分组UITableView中,表格视图的顶部和第一个单元格之间存在间隙。

奇怪的是,当我第一次加载内容时,表格看起来还可以(第一张图片),但是当我向下滚动时,顶部和第一个单元格之间会出现一个空格(第二张图片):

在此处输入图像描述 在此处输入图像描述

使用简单的样式不会发生这种行为,但不幸的是我需要使用分组表视图样式。

有什么想法吗?

4

15 回答 15

132

只需在你的ViewDidLoad方法中添加这个

self.automaticallyAdjustsScrollViewInsets = NO;
于 2014-01-29T15:35:12.250 回答
37

答案对我和我的团队来说很有趣,而且工作起来很迷人

  • 在 Interface Builder 中,只需将 tableview 移动到视图层次结构中的另一个视图下。

原因:

我们观察到这种情况仅发生在 View Hierarchy 中的第一个 View 上,如果这个第一个视图是 UITableView 的话。所以,所有其他类似的 UITableView 都没有这个烦人的部分,除了第一个。我们尝试将 UITableView 移出视图层次结构的第一位,并且一切都按预期工作。

于 2013-12-11T11:15:42.443 回答
16

通过在 Storyboard 中选择 xib 或控制器,转到视图控制器的属性检查器。取消选中Adjust Scroll View Insets in Layout。它会解决问题在此处输入图像描述

于 2015-01-09T11:29:55.373 回答
12

如果您使用具有分组样式且只有 1 个组的 UITableView,请使用普通样式来解决您的问题。

UITableViewController *tableViewController;
tableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
于 2013-10-08T09:25:57.190 回答
5

分组类型中此问题的最简单解决方案tableView是:

tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableView.bounds.size.width, 0.01f)];
于 2015-02-24T20:24:06.730 回答
3

为了解决这个问题,请确保您在 ViewController 上取消选中此字段:

在 ViewController >> Attibutes Inspector >> Layout 上(未选中 -调整滚动视图插图

在此处输入图像描述

如果这还不够,请在 TableView 上尝试此操作,将 Style 设置为Plain

示例图片

这将解决您的问题

于 2017-06-01T19:06:17.420 回答
2

伙计们!我有同样的问题。TableView 在导航栏和第一个单元格之间出现了可用空间。这段代码救了我:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0) {
        return 10;
    }
    else return 2;
}
于 2013-11-18T14:35:35.567 回答
1

UITableView 本身上方以及单元格之间有一个空间。在上面的 2 个不同答案中找到了我的解决方案。再次发布它,这样没有人会错过这两个解决方案。

这从上面删除了空间:

self.automaticallyAdjustsScrollViewInsets = NO;

这删除了单元格下方的空格:将 UITableView 的“样式”属性设置为“普通”

于 2014-09-25T13:59:23.753 回答
1

我正在使用Xcode 7.3.1iOS9swift 2。我想分享对我有用的东西:

只需在你的ViewDidLoad方法中添加这个

self.automaticallyAdjustsScrollViewInsets = false;
于 2017-01-10T06:40:06.523 回答
0

从 iOS 7 开始,您会自动获得组标题和一些空间。将您的应用程序与“设置”应用程序进行比较,您会看到。您可以通过告诉 UITableView 将标题高度设置为尽可能小来解决它。请参阅如何隐藏第一个组标题

于 2013-11-01T01:21:49.437 回答
0

我意识到这是很久以前回答的,但是对于遇到类似情况的其他人,我将分享最终为我工作的内容:

如果您使用的是 xib,请选择顶层视图并在属性检查器的模拟指标区域中将“状态栏”设置为“无”。修复了我的间距问题。

于 2014-03-13T19:21:55.927 回答
0

对我来说,这不起作用

self.automaticallyAdjustsScrollViewInsets = NO;

这只会导致表格视图位于 NavigationBar 下方。

对我有用的是进入我的故事板,并调整我的 tableView 的大小。似乎我的 tableView 在顶部有 20px 的间隙以允许状态栏。我缩放它,一切都完美排列。

于 2014-08-09T19:05:11.210 回答
0

在一种非常奇怪的情况下,我在一个表格视图的顶部看到了这个额外的空间。

在我的导航堆栈中添加 aUIScrollView作为我的第一个控制器的根视图后,如果我将下一个控制器作为Show Detailsegue 呈现,我的下一个控制器将在其表视图上方有空间。

我的解决方案是将segue更改为Present Modally,一切恢复正常。

segue 变化中最奇怪的部分是,我将根视图添加为 a之前UIScrollView,我的Show Detailsegue 以模态方式呈现下一个控制器。然而,我添加了 root之后UIScrollViewShow Detailsegue 正在推动下一个控制器(这不是我想要的)。

于 2017-01-10T12:50:08.697 回答
0

有类似的问题,甚至将automaticAdjustsScrollViewInsets 设置为NO。这为我解决了:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
{
    return CGFLOAT_MIN;
}
于 2017-08-15T14:44:32.903 回答
-2

UIViewController.hiOS9 SDK中有一个方法:

@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets NS_AVAILABLE_IOS(7_0); // Defaults to YES

不是属性,所以

self.automaticallyAdjustsScrollViewInsets = NO; 

应该

-(BOOL)automaticallyAdjustsScrollViewInsets{   
     return NO;
}
于 2016-08-30T04:29:48.300 回答