128

我目前正在将我的应用程序迁移到 ios 7 上,并且在新的导航控制器/栏管理上被困了几个小时。

之前,当我们有一个导航控制器时,我们有一个这样的片段:

UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];

在界面生成器中,我们可以选择为视图设置一个现有的导航栏,并且所有内容都与真实视图的内容相匹配。

好的,现在,我不知道如何使用界面生成器进行正确设计。我仍然有我的片段来初始化我的导航控制器。但是,在我的 MainViewController 的界面构建器中,如果我将状态栏设置为半透明或不透明的导航栏,我的顶部偏移量为 44px(见下文)。


Interface Builder_________________________和结果


现在,如果我将状态栏设置为无,则顶部没有偏移,但由于导航栏导致模拟器上的视图较小,因此界面构建器中的视图底部被切断。

Interface Builder_________________________和结果

我想我真的在这里遗漏了一些东西,但我在 iOS7 过渡指南中找不到任何主题或苹果信息。

谢谢你的帮助


编辑

正如我们在图片中看到的,视图的第一个子视图是包含两个标签的 UIScrollView,没有滚动视图时不会出现问题。如果它是 UITableView,它也会出现。如果标签在 UIScrollView 之外,则该标签没有偏移。

4

8 回答 8

289

好的,所以我找到了解决方案,我在控制器中设置了属性:

self.automaticallyAdjustsScrollViewInsets = false

不过,我并不真正了解此属性的真正好处,(或者为什么默认值为 true)

我发现的唯一文档是:

更新

在 iOS 11automaticallyAdjustsScrollViewInsets中已弃用

您现在应该使用:

self.tableView.contentInsetAdjustmentBehavior = .never

我还鼓励您检查此问题及其答案,以更好地了解这些属性

于 2013-09-24T18:55:10.590 回答
92

@Justafinger 的回答对我来说也很有吸引力。

只是想补充一点,这个设置也可以从界面构建器中轻松调整。

  1. 选择您的视图控制器
  2. 单击“属性检查器”选项卡
  3. 取消选中“调整滚动视图插图”
  4. 享受!

在此处输入图像描述

于 2014-10-25T21:05:49.247 回答
11

我遇到了同样的问题,但我在界面构建器中的 ViewController 上发现了一个相当奇怪的属性,这似乎对我造成了这种影响。有一组“扩展边缘”复选框。我删除了“Under Top Bars”检查,一切都开始为我正确布局。

于 2014-04-29T19:27:41.573 回答
2

将 automaticAdjustsScrollViewInsets 设置为 YES(默认设置)时,ios6 和 ios7 之间的滚动视图定位不匹配,因此要使它们保持一致,您需要禁用此设置。但是,如果遇到 automaticAdjustsScrollViewInsets,ios6 会崩溃,因此您要么需要在 ios7 上以编程方式更改 automaticAdjustsScrollViewInsets,要么使用情节提要/NIB 关闭该选项

于 2014-02-15T07:32:20.080 回答
2

我遇到了类似的问题,在关闭 viewController 后,tableView 的 contentOffset 更改为 (0, -64)。

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

它是父视图中的第一个控件,如下所示:

前

我在 ImageView 之后移动了 tableView 并且它起作用了:

后

似乎将表格视图放在第一个位置会引起麻烦,将表格视图移动到另一个位置可以解决问题。

PD我没有使用自动布局也没有故事板

希望这可以帮助某人!

于 2014-04-11T20:22:25.270 回答
1

我也面临这个问题。

UIScrollView内容大小由操作系统计算为其他大小,由约束系统提供的来源 - 这就是操作系统存在疑问的原因。

如何修复 - 您应该明确定义内容大小UIScrollView

  1. 将可滚动内容嵌入到UIView(我将其重命名为ContentView
  2. 添加约束:

ContentView.Weight = View.WeightContentView.Height = View.Height

在此处输入图像描述

于 2015-09-25T09:59:48.223 回答
0

似乎解决方案是将情节提要文件视为“iOS 6.1 及更早版本”(选择情节提要文件->文件检查器->界面生成器文档->查看方式。在此模式下定位子视图会显示偏移量。

于 2013-09-23T20:27:43.487 回答
0

谢谢你们的解决方案!我挣扎了好几个小时试图解决这个问题。没有涉及导航栏时一切正常,但是当我将 ViewController 嵌入到 NavigationController 中时,一切都变得混乱了。

我通过取消选中Adjust Scroll View InsetsUnder Top Bars解决了这个问题。这两个都位于 ViewController 的 Attribute Inspector 中。太感谢了!

于 2016-12-10T07:11:23.143 回答