为什么在iOS7中,我的UITableView顶部的UITableViewStyleGrouped样式具有额外的填充


635

从iOS7开始,我的顶部UITableView还有一个style 额外的空间UITableViewStyleGrouped

这是一个例子:

在此处输入图片说明

tableview从第一个箭头开始,有35个像素的无法解释的填充,然后绿色的标头UIView返回viewForHeaderInSection(该部分为0)。

谁能解释这35像素的来源,以及如何在不切换至的情况下摆脱它UITableViewStylePlain


注意:

在iOS 11及更高版本中:

tableView.contentInsetAdjustmentBehavior = .never

您是否在使用最新的iOS 7?这些不一致类型中的某些(但不是全部,也许不是这个)在以后的开发预览中已得到解决。我应该知道:我拖延了很多问题,使他们消失了。
Dan Rosenstark


简短的答案是,这种额外的填充可能是由于表视图标头(而不是节标头)引起的,并且UITableView不希望为其分配高度为0.0的标头。有关更多详细信息,请访问stackoverflow.com/a/31223403/1394534
Aurelien Porte

30
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 0.0f, CGFLOAT_MIN)];注:0.0f只是被忽略,如果你在矩形的高度使用它。因此,我们使用了可能的最接近零的CGFloat(至少对我来说这是“有效的”……只是不理想的解决方案)。
亚历杭德罗·伊万

1
@AlejandroIván您的评论让我难过。我有一个带有分组原型的tableView。我正在使用numberSections = data.count并设置numberRows =1。我设置了heightForFooterInSection以在每个之间留出一个干净的空间,并且由于某种原因出现了空白的tableHeaderView。
瑞安·亚历山大

Answers:


863

我得到了以下帮助:

YouStoryboard.storyboard> YouViewController>属性检查器>取消选中-调整滚动视图插图。

enter image description here


42
我认为这是删除该填充的正确方法,而不是篡改edgeInset值。
Hgeg

21
这对我不起作用-我上面有一个不透明的navBar,关闭此功能会将内容推送到它下面。
slycrel 2014年

5
使用custom时不起作用collectionview。(当collectionviewcell
表格视图

5
没为我工作;唯一有效的方法是切换到“平原”而不是“分组”
shim

28
我在容器视图内的TableViewController遇到此问题。我必须不直接在嵌入的TableViewController上设置此属性,而是在包含容器视图的视图控制器上设置此属性。然后它起作用了。
安迪·莫蒂默

325

我玩了一点,看来这是设置tableView的副作用tableHeaderView = nil

因为我的tableView动态显示tableHeaderView,所以当我需要隐藏tableHeaderView而不是做时self.tableView.tableHeaderView = nil;,我这样做:

self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableView.bounds.size.width, 0.01f)];

我喜欢此解决方案,而不是设置某种随意性,contentInset.top因为我也使用contentInset.top动态方法。每当我重新计算时,必须记住要删除额外的35px,这contentInset.top很繁琐。


4
很好的解决方案!实际上,您必须将其设置为0.01f才能摆脱代码中的默认表视图标头视图。
Simone Manganelli 2013年

2
顺便说一句,这也可以通过在Interface Builder中拖放一次来完成。还是谢谢你!:)
RudolfAdamkovič13年

8
您的先生应该为此获得勋章
Vaibhav Gautam

7
请记住,在表格视图顶部的高度为0.01f的视图将意味着所有位于单元格前面的单元格都未对齐(第一个单元格的Y起点为0.01,下一个单元格的高度为+0.01,依此类推),因此这些单元格的内容会错位。(Debug > Color Misaligned Images在模拟器中打开可以自己查看。)您不想这样做。
Simon Whitaker 2014年

2
最好使用UITableViewHeaderFooterView而不是UIView。并且CGFLOAT_MIN工作原理相同,0.01f但理论上更好。
Jaybo,2015年

178

对于IOS 7,如果要在视图控制器中分配表视图,则可以查看

self.edgesForExtendedLayout = UIRectEdgeNone;

你的问题似乎和我的相似

更新:

iOS 9.x中的Swift:

self.edgesForExtendedLayout = UIRectEdge.None

迅捷3:

self.edgesForExtendedLayout = UIRectEdge.init(rawValue: 0)

3
在我的平原上工作UITableView。问题源于我UITableViewUIViewController内心,UINavigationController这导致表格的内容下降了44分,因此初始内容并未落后于表格navBar。不过,我的布局并不需要这样做,因此只会引起问题。最终,我将代码更改为automaticallyAdjustsScrollViewInsets也可以使用。
DBD 2014年

此属性仅适用于嵌入在诸如UINavigationController之类的容器中的视图控制器。窗口的根视图控制器对此属性没有反应。此属性的默认值为all。..我觉得默认值应该为0?这在哪里有优势。
Desh_

5
Swift 3更优雅:edgesForExtendedLayout = []
Dave Batton

您好@yeahdixon您使用什么软件制作粉红色箭头?在此先感谢
iArezki '17

174

尝试更改从继承的contentInset属性。UITableViewUIScrollView

self.tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);

这是一种解决方法,但是有效


6
contentTableView.contentInset = UIEdgeInsetsMake(-20, 0, -20, 0);最适合我,因为顶部和底部有20个额外的像素。
布莱恩(Brian)

1
尽管此“强力”解决方案有效,但我认为最下面的(特别是自动调整插图)应该排名更高。
eladleb 2014年

134
self.automaticallyAdjustsScrollViewInsets = NO;

试试吧,你可以处理!


在iOS 7.0中隐藏tableHeaderView非常有用,但是在较早的版本中不支持。
布莱恩

iOS的7下的伟大工程
StackRunner

3
重要提示:请确保在容器视图控制器中执行此操作,如果您将UITableView放置在一个控制器上,然后又嵌入到另一个控制器中,请在嵌入顶部控制器中执行此操作,而不要直接在您放置UITableView的控制器中执行此操作(AutoLayout将在其中放置)照顾好东西)。
詹姆斯·斯通

这比更好uncheck Adjust scroll view insets。因为有时候我们不使用情节提要来构建我们的UI。
JW.ZG

这对我有用。我将视图附加到导航栏和表视图,在iOS 11中没有发生,但在iOS 10中发生。
dobiho

78

您可以检测您的应用程序是否运行iOS7或更高版本,并在表视图委托中添加这两个方法(通常在UIViewController代码中)

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}

这可能不是一个很好的解决方案,但对我有用

迅捷版:

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return CGFloat.leastNormalMagnitude
}

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return CGFloat.leastNormalMagnitude
}

1
这对我有用。UITableView出于多种原因在顶部添加了空间。具体而言,与OP相关,此问题仅在分组样式表视图中发生。并且此解决方案解决了该问题。
RajV

5
您可以使用CGFLOAT_MIN而不是0.001,它为您提供了最小的CGFloat绝对值。
eiKatte 2015年

2
这是正确的答案,因为真正的功能是填充仅在分组样式表视图中存在,并且如果您指定页眉/页脚
则将

应该将其标记为正确答案。重写的委托方法,它回答了问题。如果您阅读了所有技巧,请至少先尝试一下。尝试发布:-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {//返回CGFLOAT_MIN; 返回30.0f; }
马修·弗格森

真好!作为奖励,如果您想在分组的部分顶部放置一个小标题,并在其之间添加更多标题,可以使用以下内容:override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return section == 0 ? 14 : 24 }
Freek Sanders

55

我已经找到了原始错误的原因,并创建了一个示例项目来展示它。我相信有一个iOS7错误。

从iOS7开始,如果您创建具有分组样式的UITableView,但未在第一个布局上设置委托,则设置委托并调用reloadData,顶部将有35px的空间,该空间永远不会消失。

看到我展示了这个错误的项目:https : //github.com/esilverberg/TableViewDelayedDelegateBug

具体来说就是这个文件:https : //github.com/esilverberg/TableViewDelayedDelegateBug/blob/master/TableViewDelayedDelegateBug/ViewController.m

如果第24行处于活动状态,

[self performSelector:@selector(updateDelegate) withObject:nil afterDelay:0.0];

顶部会有35像素的额外空间。如果第27行处于活动状态并且第24行被注释掉,

self.tableView.delegate = self;

顶部没有空间。就像tableView将结果缓存在某个位置,并且在设置委托并调用reloadData之后不会重绘自身。


21
我要补充一点,即使有一个委托但该委托tableView:heightForHeaderInSection:tableView:heightForFooterInSection:返回0,您也会遇到这个问题。实现上面的协议方法并返回0.01f修复了我。
约翰·埃斯特罗皮亚

1
是!!我已经尝试了3种所谓的解决方案,而这就是其中一种!太棒了,谢谢:D
Henrik Erlandsson

完善。任何人都报告了一个错误,因为我认为这不是预期的行为。
Pushparaj 2014年

很棒的发现!这仍然在ios 9中发生(我们不使用XIB),但是在init上设置委托固定了间距(不在loadView或viewDIdLoad中)。谢谢!
John Stricker

1
为标题设置estimatedHeight帮我
维克托

49

取消选中“调整滚动视图插图”

在此处输入图片说明


我的另一个View Controller需要此选项,显然当我制作新的VC时,所做的更改会保留下来。谢谢你!
大卫

是的 可以,只需在ContainerView中进行设置即可!
Felipe FMMobile

46

另一个快速评论...即使在XCode的6.1,存在与出现在顶部的垂直空间的错误UIScrollViewsUITextViewsUITableViews

在此处输入图片说明

有时,解决此问题的唯一方法是进入情节提要中并拖动问题控件,以使其不再是页面上的第一个子视图。

在此处输入图片说明

(感谢Oded向我指出了这个方向……我发布此评论只是为了添加一些屏幕截图,以演示症状并进行修复。)


1
请注意,如果您将UITextView作为页面上的第一个子控件,则此错误errrr问题也会在iOS 8中发生...因此,这不仅仅是UITableView问题。
Mike Gledhill,2015年

1
在所有解决方案中,只有此技巧对我有用。对怪异错误的怪异修复。我遇到过UITableview的问题。
2015年

4
一百万谢谢!这是唯一对我有用的解决方案。
user139816

1
(令我惊讶的是18个月后,读者仍在投票支持这个答案。苹果公司是否真的没有解决此问题?!)
Mike Gledhill

1
救了我!谢谢。您知道找到这个简单的小“修复程序”花了多长时间吗?腹泻。
Mc.Stever,2016年

40

根据Apple的iOS7过渡指南,滚动视图的内容插图会自动调整。automaticAdjustsScrollViewInsets的默认值设置为YES。

具有UITableView的UIViewController应该将此属性设置为NO。

self.automaticallyAdjustsScrollViewInsets = NO;

这将达到目的。

编辑1:

另外,可以尝试-

self.navigationController.navigationBar.translucent = YES;

这也消除了顶部的多余填充。


很好的答案,除非它不能完全回答问题。Esilver谈论的是35px的间隙,但是iOS7增加了额外的20px标题:等于状态栏的高度。
马丁

可笑的问题。感谢您的回答。
Genki 2014年

这是另一个问题的答案。
2014年

谢谢它为我工作,在我的特殊情况下,我在viewcontroller中嵌入了一个tableviewcontroller,通过在viewcontroller中自动设置AdjustsScrollViewInsets = false,顶部间隙消失了
Alexey


36

上面的许多以前的答案都太过分了。如果Apple决定修复此意外行为,则它们将在将来的任何时候中断。

问题根源:

  1. a UITableView不希望标题的高度为0.0。如果您要执行的操作是使标题的高度为0,则可以跳至解决方案。

  2. 即使以后您为标头分配了非0.0的高度,a UITableView也不希望首先分配标高为0.0的标头。

解:

然后,最简单,最可靠的解决方法是,在将标题高度分配给表格视图时,确保标题高度不为0。

这样的事情会起作用:

// Replace UIView with whatever class you're using as your header below:
UIView *tableViewHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.tableView.bounds.size.width, CGFLOAT_MIN)];
self.tableView.tableHeaderView = tableViewHeaderView;

这样的事情会在某个时候(通常在滚动之后)导致问题:

// Replace UIView with whatever class you're using as your header below:
UIView *tableViewHeaderView = [[UIView alloc] initWithFrame:CGRectZero];
self.tableView.tableHeaderView = tableViewHeaderView;

最后,我找到了有效的答案。谢谢。此外,我了解到这tableView.tableHeaderView实际上是行内容上方的辅助视图。直到您的答案出来之前,我一直对节标题感到困惑。
Joe Huang

1
CGFLOAT_MIN已换上CGFloat.leastNormalMagnitude斯威夫特3
克莱埃利斯

29

故事板:

只需取消选中:Adjust Scroll View Insets在View Controller的选项中

在此处输入图片说明

码:

self.automaticallyAdjustsScrollViewInsets = false

2
使用xcode 7,我看不到“属性检查器”>“布局”,我应该在哪里添加self.automaticallyAdjustsScrollViewInsets = false
alex,

鉴于确实加载。
CW0007007

23

这是使用Swift 3的iOS 10解决方案:

通过从中实现以下方法,可以摆脱顶部和底部的填充UITableViewDelegate

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
{ 
    return CGFloat.leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat
{
   return CGFloat.leastNormalMagnitude
}

SO的第二页帮助了我...。我不知道为什么,也许是因为AutomaticDimension,也许是因为VFL的约束,无论如何,谢谢!ozi bua ist brav!:D
Pentarex

这些是节的页眉和页脚。这个问题与整个表头有关。此外,在任何一种委托方法中,都没有特定于Swift3或iOS 10的东西(它们已经存在很长时间了)。
Nicolas Miari '17

14

就我而言,这就是帮助我的原因。我也支持ios6。

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    self.edgesForExtendedLayout = UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars = NO;
    self.automaticallyAdjustsScrollViewInsets = NO;
}

不知道这样做是什么,但是效果很好。你能解释一下吗?
马特·沃尔夫

@MattWolfe我迷路了,找到了这个解决方案,不知道为什么会这样。我的猜测是,由于状态栏(或在其他情况下为工具栏/标签栏),控制器决定该表视图需要插入,因此它会自动添加它。我真的在为iOS7的一些新功能而苦苦挣扎。也许有人了解这一点,并对此有一个真正的解释?
卢卡斯

最近2天用了一个相对较小的应用程序移植到iOS 7上,但仍然有一些小问题。.我在ios 7中修复了该问题,它在6中失效,反之亦然。
马特·沃尔夫

这是与OP不同的问题。即使这样,对于分组表视图,顶部也会添加额外的空间。
RajV

1
这似乎是关键所在:self.automaticallyAdjustsScrollViewInsets = NO; 只是设置删除了我的多余空间。
Mike M

14

只需将以下内容添加到您的VC中的viewDidLoad中:

self.automaticallyAdjustsScrollViewInsets = NO;

此修复程序有效,我更喜欢使用魔术数字手动设置插图。谢谢!
imobilizer

14

所以我在这里尝试每种方法,但是这次都没有帮助。我的案例是iOS 9上的分组表格视图。我真的不知道为什么和如何找到这个视图,但对我来说,用至少高度设置tableViewHeader一个UIView可以0.01解决。CGRectZero没有帮助,没有什么真正的帮助:

tableView.tableHeaderView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 0.0, height: 0.01))

10

斯威夫特:iOS,当我在同一屏幕上单击“上一步”时,在滚动视图上有tableview。滚动视图在顶部占用更多空间。

 self.automaticallyAdjustsScrollViewInsets = false

一个布尔值,指示视图控制器是否应自动调整其滚动视图插图。默认值为true,它允许视图控制器根据状态栏,导航栏以及工具栏或选项卡栏占用的屏幕区域来调整其滚动视图插图。如果要自己管理滚动视图插图调整,则设置为false,例如在视图层次结构中有多个滚动视图时。


10

感谢@Aurelien Porte的回答。这是我的解决方案

此问题的原因:

  1. UITableView不希望标题的高度为0.0。如果您要执行的操作是使标题的高度为0,则可以跳至解决方案。
  2. 即使以后您为标头分配了非0.0的高度,UITableView也不喜欢首先分配给标头的高度为0.0的标头。

在ViewDidLoad中:

self.edgesForExtendedLayout = UIRectEdge.None

self.automaticallyAdjustsScrollViewInsets = false

不需要像这样的东西:

self.myTableview.contentInset = UIEdgeInsetsMake(-56, 0, 0, 0)

heightForHeaderInSection代表中:

if section == 0
    {
        return 1
    }
    else
    {
        return 40; // your other headers height value
    }

viewForHeaderInSection代表中:

if section == 0 
{  
   // Note CGFloat.min for swift
   // For Objective-c CGFLOAT_MIN 
   let headerView = UIView.init(frame: CGRectMake(0.0, 0.0, self.myShaadiTableview.bounds.size.width, CGFloat.min)) 
   return headerView
}
else
{ 
   // Construct your other headers here 
}

10

这就是在iOS 11Xcode 9.1中可以轻松修复的方式通过Storyboard:

选择表视图>大小检查器>内容插入:从不


1
为我工作:)
bhupinder

大!谢谢:)
Saeed Ir

1
这是automaticallyAdjustsScrollViewInsets在ios 11中代替的
Nik Kov '18

9

我假设这只是新的一部分 UITableViewStyleGrouped样式的。它在所有分组的表视图中,并且似乎没有任何直接方法可以控制该空间。

如果该空间用表示UIView,则可以搜索所有subviewsUITableView发现,特定的视图和直接编辑它。但是,也有可能在标头和单元格开始之前,该空间只是硬编码的偏移量,将无法进行任何编辑。

要搜索所有子视图(我将在表没有单元格的情况下运行此代码,以使其更易于阅读输出):

- (void)listSubviewsOfView:(UIView *)view {

    // Get the subviews of the view
    NSArray *subviews = [view subviews];

    // Return if there are no subviews
    if ([subviews count] == 0) return;

    for (UIView *subview in subviews) {

        NSLog(@"%@", subview);

        // List the subviews of subview
        [self listSubviewsOfView:subview];
    }
}

3
如果UITableViewCellScrollViewiOS7上的UITableViews(更具体地讲)教会了我们一件事,那就是只保留内置类的视图层次结构。
Matthias Bauch 2013年

好点子。另一个选择是...继续为每个iOS黑客;)
Dan Rosenstark 2013年

哎呀,是的 打算写那个警告但忘了。
凯文

凯文-我认为您是对的,这是设计使然。似乎为heightForHeaderInSection返回0是删除此填充的最简单方法。出于某种原因,该实例对我不起作用,但在其他UITableViews上确实起作用。
esilver 2013年

1
绝对是“设计使然”。如果您暂停执行并运行:po [((UIApplication *)UIApplication.sharedApplication).keyWindow recursiveDescription]您会看到表标题,第一节标题或第一个单元格(取决于您使用的内容)自然会留下35px的边框。
T先生

9

我的答案将是更通用的答案,但也可以应用于此。

如果(ViewController的根视图根视图第一个子视图(子视图)是UIScrollView(或UIScrollView本身)的子类,并且

self.navigationController.navigationBar.translucent = YES;

框架将自动设置预先计算的contentInset


为了避免这种情况,您可以做

self.automaticallyAdjustsScrollViewInsets = NO;

但就我而言,我无法执行此操作,因为我正在实现带有UIView组件的SDK,该组件可被其他开发人员使用。该UIView组件包含UIWebView(具有UIScrollView作为第一个子视图)。如果将该组件添加为UIViewController的视图层次结构中的第一个子组件,则系统将应用自动插入。

我已通过在添加UIWebView之前添加带有框架(0,0,0,0)的虚拟视图来解决此问题。

在这种情况下,系统没有找到UIScrollView的子类作为第一个子视图,并且没有应用插入


救星!谢谢self.automaticallyAdjustsScrollViewInsets = false
ethanneff '16

8

这段代码对我有用,对我来说最好的答案是objective-C向上编写的,因此我将其转换为Swift。

对于Swift 4.0+

self.tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.bounds.size.width, height: 0.01))

只需将其写入viewDidLoad(),它将像魅力一样工作。


1
非常感谢您,对我来说很好。
葡萄牙ngelo Polotto

1
您欢迎的快乐编码
Vipul Kumar,

7

我和arielyz有相同的解决方法。一旦将UITableView移到父视图的第一个子视图后,它就消失了。我的空间是20像素,而不是35。

我无法在纵向xib(仅横向xib)中重新创建它。如果我可以在一个简单的演示应用程序中重现它,我将在稍后提交雷达错误。


遇到相同的问题,无法通过更改contentInset来解决,但此方法有效,即使它很hacky。值得的是,使用可视化调试工具,我可以看到虽然UITableView的高度合适,但其中的UITableViewWrapper却没有。
Mic Fok 2014年

完善。这为我修复了XCode 6.1中的错误。该StackOverflow页面中的其他建议均无任何不同。我在UIView中有一个UITableView,它是第一个子视图。拖动它成为第二个子视图可以完美地修复它。(如果有人需要我,我会在酒吧里的。)
Mike Gledhill 2014年

谢谢!如果您在容器中有一个表视图控制器,这也将起作用。移动容器,使其不在父视图中的第一个容器中,这将消除表视图顶部的间隙。
奇怪的2015年

7

我认为制作UIEdgeInsets -35 0 0 0是乏味的。就我而言,我实现了tableView:heightForHeaderInSection:方法,它有可能返回0。

当我将0更改为0.1f时,问题就消失了。


1
如果可以的话,我将不止一次投票。必须是一个奇怪的自动布局故障或类似的东西。...> 0起作用时,我建议不要使用FLT_EPSILON或DBL_EPSILON代替0.1,因为它们都代表较小的正值,因此1.0 + epsilon!= 1.0
Henri Normak 2014年

7

唯一对我有用的是:

斯威夫特

tableView.sectionHeaderHeight = 0
tableView.sectionFooterHeight = 0

目标-C

self.tableView.sectionHeaderHeight = 0;
self.tableView.sectionFooterHeight = 0;

另外,我在第一部分还有多余的空间。那是因为我没有tableHeaderView正确使用该属性。还通过添加以下内容解决了该问题:

self.tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 0.01))

适用于我的Swift 4.2。谢谢
Sylar

尝试了此页面上的所有内容,适用于iOS13分组表视图和标题视图。self.tableView.tableHeaderView = UIView(框架:CGRect(x:0,y:0,宽度:tableView.frame.size.width,高度:0.01))。解决了这个问题。

7

Swift 4代码:对于没有节头的tableview,您可以添加以下代码:

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return CGFloat.leastNormalMagnitude
}

并将标题空间设置为0。

如果您想要特定身高的标头,请传递该值:

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return header_height
}

以及来自viewForHeaderinSection委托的视图。


这不能回答问题。问题是多余的空间来自哪里,而不是如何摆脱它。
Stephen Newell '18

奇怪的是,如果您在heightForHeaderInsection中返回0,那么您仍然会得到这个额外的空间。它与CGFloat.leastNormalMagnitude(最小正数)完美配合
ShadeToD

7

具体来说,为了从顶部删除tableviewHeader空间,我进行了以下更改:

YouStoryboard.storyboard> YouViewController>选择TableView>大小检查器>内容插图-设置为永不。

在此处输入图片说明


该答案相比,除了屏幕截图以外,还有哪些其他信息?
Artjom B.

我猜也是一样,我在寻找解决方案时没有找到答案。那我应该删除答案吗?
user832 '18

如果您不能通过描述Content insets = Never实际上解决此问题的方式来扩大回答的范围(此选项如何起作用?),则不会。
Artjom B.

当内容插入设置为从不时,tableView将不会在textField编辑时向上滚动。
mojtaba al moussawi

6

使用这个我认为这有帮助...

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
 {
    return 0.005f;// set this according to that you want...
 }

1
辉煌!在iOS 9.2中像超级按钮一样工作。这个答案是完美的,因为在某些情况下,我需要隐藏第一个标头,而在另一些情况下,则需要显示它。我看到了另一个使用CGFloat.min的答案,它也有效。所以,我的viewController现在可以提供要么喜欢44.0实数或基本为0
David H制作

6
override func viewWillAppear(animated: Bool) {
        self.edgesForExtendedLayout = UIRectEdge.None

 //  OR

self.sampleTableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0);

   //OR

 self.automaticallyAdjustsScrollViewInsets = false
        }

automaticAdjustsScrollViewInsets =我的虚假工作!谢谢!
Daniel Kuta
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.