IOS7:UINavigationController中的UIScrollView偏移量

str*_*eem 126 uinavigationbar uinavigationcontroller ios7

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

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

UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];
Run Code Online (Sandbox Code Playgroud)

在界面构建器中,我们可以选择为视图设置现有导航栏,并且所有内容都与实际视图的内容相匹配.

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


Interface Builder_________________________和结果


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

Interface Builder_________________________和结果

我想我真的在这里遗漏了一些东西,但我在iOS7 Transitions Guide中找不到任何主题或苹果信息.

谢谢你的帮助


编辑

正如我们在图片中看到的那样,视图的第一个子节点是包含两个标签的UIScrollView,当没有scrollview时,问题不会出现.如果它是UITableView也会出现.如果标签位于UIScrollView之外,则该标签没有偏移量.

str*_*eem 286

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

self.automaticallyAdjustsScrollViewInsets = false
Run Code Online (Sandbox Code Playgroud)

我真的不明白这个属性的真正好处,(或者为什么默认值为true)

我发现的唯一文件是:

更新

在iOS 11 automaticallyAdjustsScrollViewInsets中已弃用

你现在应该使用:

self.tableView.contentInsetAdjustmentBehavior = .never
Run Code Online (Sandbox Code Playgroud)

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

  • 很棒的发现.故事板中的UIScrollView非常复杂.我希望Apple在未来的Xcode版本中使它有点无缝. (12认同)
  • 此标志也可以在storyboard/nib中关闭,View Controller具有"Adjust Scroll View Insets"复选框.我一直在撞墙,现在试图通过滚动视图和自动布局解决我的问题,通过支持iOS 6和7进一步复杂化.所以非常感谢最终提供解决方案! (9认同)
  • 此代码阻止我的`UIScrollView`滚动.但如果没有这个,我无法摆脱抵消.Weired ... (4认同)
  • 应用程序文档会告诉您设置navigationbar.translucent = YES会阻止导航栏推送内容.这是最大的谎言,直到这篇文章才花了我很多时间.此外,您必须设置self.automaticallyAdjustsScrollViewInsets = NO; 非常感谢你的这篇文章!!!!!!!苹果和苹果? (2认同)

Myx*_*tic 92

@ Justafinger的答案对我来说也像是一种魅力.

只是想补充一点,也可以从界面构建器轻松调整此设置.

  1. 选择视图控制器
  2. 单击"属性检查器"选项卡
  3. 取消选中"调整滚动视图插图"
  4. 请享用!

在此输入图像描述


小智 11

我遇到了同样的问题,但我在界面构建器中的ViewController上发现了一个相当奇怪的属性,似乎已经为我造成了这个问题.有一个"Extend Edges"复选框.我删除了"Under Top Bars"检查,一切都开始适合我.