问题描述:iOS 7 在分组UITableView中,表格视图的顶部和第一个单元格之间存在间隙。
奇怪的是,当我第一次加载内容时,表格看起来还可以(第一张图片),但是当我向下滚动时,顶部和第一个单元格之间会出现一个空格(第二张图片):

使用简单的样式不会发生这种行为,但不幸的是我需要使用分组表视图样式。
有什么想法吗?
问题描述:iOS 7 在分组UITableView中,表格视图的顶部和第一个单元格之间存在间隙。
奇怪的是,当我第一次加载内容时,表格看起来还可以(第一张图片),但是当我向下滚动时,顶部和第一个单元格之间会出现一个空格(第二张图片):

使用简单的样式不会发生这种行为,但不幸的是我需要使用分组表视图样式。
有什么想法吗?
只需在你的ViewDidLoad方法中添加这个
self.automaticallyAdjustsScrollViewInsets = NO;
答案对我和我的团队来说很有趣,而且工作起来很迷人
原因:
我们观察到这种情况仅发生在 View Hierarchy 中的第一个 View 上,如果这个第一个视图是 UITableView 的话。所以,所有其他类似的 UITableView 都没有这个烦人的部分,除了第一个。我们尝试将 UITableView 移出视图层次结构的第一位,并且一切都按预期工作。
通过在 Storyboard 中选择 xib 或控制器,转到视图控制器的属性检查器。取消选中Adjust Scroll View Insets in Layout。它会解决问题
如果您使用具有分组样式且只有 1 个组的 UITableView,请使用普通样式来解决您的问题。
UITableViewController *tableViewController;
tableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
分组类型中此问题的最简单解决方案tableView是:
tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableView.bounds.size.width, 0.01f)];
伙计们!我有同样的问题。TableView 在导航栏和第一个单元格之间出现了可用空间。这段代码救了我:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 0) {
return 10;
}
else return 2;
}
UITableView 本身上方以及单元格之间有一个空间。在上面的 2 个不同答案中找到了我的解决方案。再次发布它,这样没有人会错过这两个解决方案。
这从上面删除了空间:
self.automaticallyAdjustsScrollViewInsets = NO;
这删除了单元格下方的空格:将 UITableView 的“样式”属性设置为“普通”
我正在使用Xcode 7.3.1、iOS9和swift 2。我想分享对我有用的东西:
只需在你的ViewDidLoad方法中添加这个
self.automaticallyAdjustsScrollViewInsets = false;
从 iOS 7 开始,您会自动获得组标题和一些空间。将您的应用程序与“设置”应用程序进行比较,您会看到。您可以通过告诉 UITableView 将标题高度设置为尽可能小来解决它。请参阅如何隐藏第一个组标题。
我意识到这是很久以前回答的,但是对于遇到类似情况的其他人,我将分享最终为我工作的内容:
如果您使用的是 xib,请选择顶层视图并在属性检查器的模拟指标区域中将“状态栏”设置为“无”。修复了我的间距问题。
对我来说,这不起作用
self.automaticallyAdjustsScrollViewInsets = NO;
这只会导致表格视图位于 NavigationBar 下方。
对我有用的是进入我的故事板,并调整我的 tableView 的大小。似乎我的 tableView 在顶部有 20px 的间隙以允许状态栏。我缩放它,一切都完美排列。
在一种非常奇怪的情况下,我在一个表格视图的顶部看到了这个额外的空间。
在我的导航堆栈中添加 aUIScrollView作为我的第一个控制器的根视图后,如果我将下一个控制器作为Show Detailsegue 呈现,我的下一个控制器将在其表视图上方有空间。
我的解决方案是将segue更改为Present Modally,一切恢复正常。
segue 变化中最奇怪的部分是,在我将根视图添加为 a之前UIScrollView,我的Show Detailsegue 以模态方式呈现下一个控制器。然而,在我添加了 root之后UIScrollView,Show Detailsegue 正在推动下一个控制器(这不是我想要的)。
有类似的问题,甚至将automaticAdjustsScrollViewInsets 设置为NO。这为我解决了:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
{
return CGFLOAT_MIN;
}
在UIViewController.hiOS9 SDK中有一个方法:
@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets NS_AVAILABLE_IOS(7_0); // Defaults to YES
不是属性,所以
self.automaticallyAdjustsScrollViewInsets = NO;
应该
-(BOOL)automaticallyAdjustsScrollViewInsets{
return NO;
}