IOS7:UINavigationController中的UIScrollView偏移量

时间:2013-09-23 20:05:48

标签: uinavigationcontroller uinavigationbar ios7

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

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

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

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

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


Interface Builder_________________________和结果


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

Interface Builder_________________________和结果

我想我真的错过了一些东西,但我在iOS7 Transitions Guide中找不到任何主题或苹果信息。

感谢您的帮助


修改

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

8 个答案:

答案 0 :(得分:285)

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

self.automaticallyAdjustsScrollViewInsets = false

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

我发现的唯一文件是:

<强>更新

在iOS 11中automaticallyAdjustsScrollViewInsets已弃用

您现在应该使用:

self.tableView.contentInsetAdjustmentBehavior = .never

我还建议您查看this question及其答案,以便更好地了解这些属性

答案 1 :(得分:92)

@ Justafinger的答案对我来说也很有魅力。

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

  1. 选择您的视图控制器
  2. 点击“参数检查器”标签
  3. 取消选中“调整滚动视图插件”
  4. 享受!
  5. enter image description here

答案 2 :(得分:11)

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

答案 3 :(得分:2)

如果将AutomaticAdjustsScrollViewInsets设置为YES(默认设置),则ios6和ios7之间的滚动视图定位不匹配,因此要使它们保持一致,您需要禁用此设置。但是,如果碰到了selfAdjustsScrollViewInsets,ios6会崩溃,所以你需要在ios7上以自动调整自动调整自动调整的方式,或者使用storyboard / NIB关闭选项

答案 4 :(得分:2)

我遇到了类似的问题,在解除了一个viewController后,我的tableView中的contentOffset被更改为(0,-64)。

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

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

before

我在ImageView之后移动了tableView,它运行起来了:

after

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

Pd积。我没有使用autoLayout和故事板

希望这可以帮助别人!

答案 5 :(得分:1)

我也遇到了这个问题。

UIScrollView内容大小由操作系统计算为其他大小,由约束系统提供 - 这就是为什么操作系统有疑问。

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

  1. 将可滚动内容嵌入UIView(我将其重命名为ContentView
  2. 添加约束:
  3. ContentView.Weight = View.WeightContentView.Height = View.Height

    sources

答案 6 :(得分:0)

似乎解决方案是将故事板文件视为“iOS 6.1及更早版本”(选择故事板文件 - &gt;文件检查器 - &gt; Interface Builder文档 - &gt;查看为。此模式中的定位子视图显示抵消。

答案 7 :(得分:0)

谢谢大家的解决方案!我努力解决问题几个小时。当没有导航栏时,一切都很好,但是当我在ViewController中嵌入ViewController时,它就变得混乱了。

我通过取消选中调整滚动视图插图在顶部栏下来解决此问题。这两个都位于ViewController的属性检查器中。万分感谢!