UITableView以iOS 7中的偏移量开始

我已经将一个简单的简单UITableView拖放到iOS 7中的UIViewController。

现在在第一个单元格开始之前有一个垂直的空间偏移量。 我如何摆脱它? 我希望第一行更接近UITableView实际启动的顶端。 我没有要求我的大偏移?

在这里输入图像说明

有任何想法吗?

默认情况下,表格视图控制器会将内容填充到导航栏下方,以便您可以滚动其下的内容,并以模糊的状态在导航栏/工具栏下方看到它。

看起来你正在把它定位在44(也许是64)px从导航栏下移出来,但它已经弥补了这一点,所以你有一个很大的差距。

转到IB中的storyboard / xib,并取消导航栏内容的显示内容。

UIViewController的新的iOS 7实现有一个新的选项集,允许开发人员select系统是否自动为UIScrollViewUITableView和派生添加插入。

要禁用此行为,请在UIViewController选定的对象检查器中取消选中这些框,以便在InterfaceBuilder中为所有想要的UIViewController执行操作:

查看控制器检查器

更多细节:

  1. 立即提交您的iOS 7应用程序。
  2. iOS 7 UI过渡指南>外观和行为

从iOS7转换指南:

如果您不希望自动调整滚动视图的内容插页,请自动将“调整滚动视图插入”设置为“否”。 (automaticAdjustsScrollViewInsets的默认值为YES。)

  self.automaticallyAdjustsScrollViewInsets = NO; 

我有一个类似的问题,解散一个viewController后,我的tableView的contentOffset被改为(0,-64)。

我的解决scheme有点奇怪,我尝试了所有其他的答案,但没有成功,唯一解决我的问题是切换.xib控件树中的tableView位置

这是在父视图中的第一个控件像这样:

之前

我在ImageView之后移动了tableView,它工作正常:

后

似乎把桌面视图放在第一个位置是造成了麻烦,而将桌面视图移动到另一个位置解决了问题。

PD我没有使用autoLayout都不是故事板

希望这可以帮助别人!

它解决了我的类似问题:

 if ([[UIDevice currentDevice].systemVersion floatValue] >= 7){ tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0); } 

尝试使用这个

tableView.separatorInset = UIEdgeInsetsZero;

显然,如果你支持的是比iOS7更less的东西,你需要确保对象在调用之前响应这个select器。

对于iOS 9,本页面的其他答案都不适用于我(即,取消选中Storyboard中的框,将AdjustsScrollViewInsets automaticallyAdjustsScrollViewInsets设置为NO )。

我的解决方法,我真的不满意是这样的:

 - (void)viewDidAppear:(BOOL)animated { self.tableView.contentOffset = CGPointMake(0.0, 0.0); self.tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0); } 

viewWillAppearviewDidLoad中的相同行是无效的。

严重的是,改变contentOffset不是解决scheme。 你只是修补一个问题,而不是修复原因。 我一直面临同样的问题,事实certificate, 分组 tableViews有一个填充顶部。 在我的情况下,设置types为普通已经完成了。

希望它可以节省几分钟的时间。 Z.

有时,当UIViewControllerembedded到导航控制器中时,我在Table View的顶部会产生一个64高度差距。

在这里输入图像说明

过去,我只是重新创造一切,希望在一个干净的石板之后,这些约束是正确的。

TIL:如果您不想对Top Layout Guide进行垂直限制,则可以按住Option键以访问Container Margin

在这里输入图像说明

然后确保Top Space to Superview常量设置为0 。 这至less对我有效。

在这里输入图像说明

这对我有用:

 - (void)loadView { [super loadView]; [self setAutomaticallyAdjustsScrollViewInsets:YES]; self.edgesForExtendedLayout = UIRectEdgeNone; self.view.frame = CGRectZero; self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; } 

如果你在UITableView之前添加一个空的UIView(或者任何视图是可滚动的,比如ScrollView和TextView),你可以有一个运气。

我有一个UITableViewControllerembedded在一个容器视图。 为了摆脱不必要的64点的垂直空间,我需要取消在界面生成器中的“调整滚动视图插入”,并在我的UITableViewController的viewWillAppear设置UITableView的contentInset如下。

垂直空间的大小看起来与导航栏的框架高度和y偏移量相匹配。 这个问题只发生在iOS 7上。

 - (void)viewWillAppear:(BOOL)animated; { [super viewWillAppear:animated]; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { const CGRect navBarFrame = self.navigationController.navigationBar.frame; const CGFloat blankVerticalSpace = navBarFrame.origin.y + navBarFrame.size.height; self.tableView.contentInset = UIEdgeInsetsMake(-blankVerticalSpace, 0, 0, 0); } } 

在Xamarin iOS中,我在前台模式对话框closures后,在后台的UITableViewController中出现了这个问题。 在移动到前台的过程中,UITableViewController设置了insets(由iOS某处):

这个class级解决了它

 public class UITableViewControllerWithBugFix : UITableViewController { public UITableViewControllerWithBugFix(UITableViewStyle withStyle) : base(withStyle) { } public override void ViewWillLayoutSubviews() { if (TableView.ContentInset.Top != 0.0f) TableView.ContentInset = UIEdgeInsets.Zero; if (TableView.ScrollIndicatorInsets.Top != 0.0f) TableView.ScrollIndicatorInsets = UIEdgeInsets.Zero; base.ViewWillLayoutSubviews(); } } 

我不时回到这种可怕的情况,我注意到这仍然是个未知数。 所以,为了将来的记忆…

最近,我正在解决这个解决方法。

  1. 在UITableView顶部添加一个子视图,零像素高度。 与Autolayout工作或没有。
  2. 如果我有信心:-)我删除这个虚假的观点,修复顶部的约束,神奇的是它的工作原理。

不要问我为什么,我仍然认为这是一个UIKit深处的错误。

如果转到故事板,则可以通过select表格并在“属性”检查器中的“表视图”部分下更改偏移量,只需将左侧的“分隔符插入”更改为0即可。

我认为真正的解决办法是在tableview上设置你的顶部和底部约束等于topMargin和bottomMargin。 不是顶部布局指南和底部布局指南。 这可以让你保持自动调整ScrollViewInsets为true。

Swift 3解决scheme:

 class PaddingLessTableView : UITableView { override func headerView(forSection section: Int) -> UITableViewHeaderFooterView? { return nil } override func footerView(forSection section: Int) -> UITableViewHeaderFooterView? { return nil } } 

如果将TableViewControllerembedded到NavigationController或ContainerView中, You have to constraint to margins instead of top Layout guide in StoryboardCheck constraint to margins when you are doing the constraints没有其他方式为我工作。 我不能评论,所以我只是重申Robert Chens的回答。

我尝试了几个答案。 更改故事板中的设置会导致从左侧popup的叠加菜单导致的波纹问题。

我在故事板中只有一个空白的UIViewController,否则一切都以编程方式生成。

我有UIViewController里面的UIView内的UITableView相同的问题。 也就是说,当UIViewController被embedded到导航控制器中时,节标题开始太慢了。 没有导航控制器一切工作正常。

为了解决这个问题,我创build了一个UILabel,并在约束条件下放置了UILabel底部约束= UIView的顶部约束(所以它不会显示在屏幕上)。

  inputsContainerView.addSubview(titleLabel) inputsContainerView.addSubview(tableView) // inputsContainerView /////////////////////////////////////// inputsContainerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true inputsContainerView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 0).isActive = true inputsContainerView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -40).isActive = true inputsContainerView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.7).isActive = true // tableView /////////////////////////////////////// tableView.centerXAnchor.constraint(equalTo: inputsContainerView.centerXAnchor).isActive = true tableView.topAnchor.constraint(equalTo: inputsContainerView.topAnchor).isActive = true tableView.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true tableView.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor).isActive = true // titleLabel - inserted to stop bad section header behavior /////////////////////////////////////// titleLabel.centerXAnchor.constraint(equalTo: inputsContainerView.centerXAnchor).isActive = true titleLabel.bottomAnchor.constraint(equalTo: inputsContainerView.topAnchor).isActive = true titleLabel.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true titleLabel.heightAnchor.constraint(equalToConstant: 20).isActive = true