我目前正在将我的应用程序迁移到 ios 7 上,并且在新的导航控制器/栏管理上被困了几个小时。
之前,当我们有一个导航控制器时,我们有一个这样的片段:
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];
在界面生成器中,我们可以选择为视图设置一个现有的导航栏,并且所有内容都与真实视图的内容相匹配。
好的,现在,我不知道如何使用界面生成器进行正确设计。我仍然有我的片段来初始化我的导航控制器。但是,在我的 MainViewController 的界面构建器中,如果我将状态栏设置为半透明或不透明的导航栏,我的顶部偏移量为 44px(见下文)。
Interface Builder_________________________和结果
https://i.stack.imgur.com/JODqs.png
现在,如果我将状态栏设置为无,则顶部没有偏移,但由于模拟器上的视图由于导航栏而较小,因此界面构建器中的视图底部被切断。
Interface Builder_________________________和结果
https://i.stack.imgur.com/RIhjR.png
我想我真的在这里遗漏了一些东西,但我在 iOS7 过渡指南中找不到任何主题或苹果信息。
谢谢你的帮助
编辑
正如我们在图片中看到的,视图的第一个子视图是包含两个标签的 UIScrollView,没有滚动视图时不会出现问题。如果它是 UITableView,它也会出现。如果标签在 UIScrollView 之外,则该标签没有偏移。
好的,所以我找到了解决方案,我在控制器中设置了属性:
self.automaticallyAdjustsScrollViewInsets = false
不过,我并不真正了解此属性的真正好处,(或者为什么默认值为 true)
我发现的唯一文档是:
https://web.archive.org/web/20160405135605/https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin
更新
在 iOS 11 中,automaticallyAdjustsScrollViewInsets
已弃用
您现在应该使用:
self.tableView.contentInsetAdjustmentBehavior = .never
我还鼓励您检查 this question 及其答案,以更好地了解这些属性
@Justafinger 的回答对我来说也很有吸引力。
只是想补充一点,这个设置也可以从界面构建器中轻松调整。
选择您的视图控制器单击“属性检查器”选项卡取消选中“调整滚动视图插图”享受!
https://i.stack.imgur.com/tDz6D.png
我遇到了同样的问题,但我在界面构建器中的 ViewController 上发现了一个相当奇怪的属性,这似乎对我造成了这种影响。有一组“扩展边缘”复选框。我删除了“Under Top Bars”检查,一切都开始为我正确布局。
将 automaticAdjustsScrollViewInsets 设置为 YES(默认设置)时,ios6 和 ios7 之间的滚动视图定位不匹配,因此要使它们保持一致,您需要禁用此设置。但是,如果遇到 automaticAdjustsScrollViewInsets,ios6 会崩溃,因此您要么需要在 ios7 上以编程方式更改 automaticAdjustsScrollViewInsets,要么使用情节提要/NIB 关闭该选项
我遇到了类似的问题,在关闭 viewController 后,tableView 的 contentOffset 更改为 (0, -64)。
我的解决方案有点奇怪,我尝试了所有其他答案但没有成功,解决我的问题的唯一方法是在 .xib 的控件树中切换 tableView 位置
它是父视图中的第一个控件,如下所示:
https://i.stack.imgur.com/3ELFx.jpg
我在 ImageView 之后移动了 tableView 并且它起作用了:
https://i.stack.imgur.com/OEwQR.jpg
似乎将表格视图放在第一个位置会引起麻烦,将表格视图移动到另一个位置可以解决问题。
PD我没有使用自动布局也没有故事板
希望这可以帮助某人!
我也面临这个问题。
UIScrollView
内容大小由 OS 计算为其他大小,由约束系统提供的来源 - 这就是 OS 存在疑问的原因。
如何修复 - 您应该明确定义 UIScrollView
的内容大小:
将可滚动内容嵌入到 UIView(我将其重命名为 ContentView)添加约束:
ContentView.Weight = View.Weight
和 ContentView.Height = View.Height
https://i.stack.imgur.com/NYaKe.png
似乎解决方案是将情节提要文件视为“iOS 6.1 及更早版本”(选择情节提要文件->文件检查器->界面生成器文档->查看方式。在此模式下定位子视图会显示偏移量。
谢谢你们的解决方案!我挣扎了好几个小时试图解决这个问题。没有涉及导航栏时一切正常,但是当我将 ViewController 嵌入到 NavigationController 中时,一切都变得混乱了。
我通过取消选中 Adjust Scroll View Insets 和 Under Top Bars 解决了这个问题。这两个都位于 ViewController 的 Attribute Inspector 中。太感谢了!
UIScrollView
滚动。但没有这个,我无法摆脱偏移量。奇怪...