首页 文章

IOS7:UINavigationController中的UIScrollView偏移量

提问于
浏览
123

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

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

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

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

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

Interface Builder_________________________和结果

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

Interface Builder_________________________和结果

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

谢谢你的帮助

EDIT

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

8 回答

  • 92

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

    self.automaticallyAdjustsScrollViewInsets = false
    

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

    我发现的唯一文件是:

    Update

    在iOS 11中,不推荐使用 automaticallyAdjustsScrollViewInsets

    你现在应该使用:

    self.tableView.contentInsetAdjustmentBehavior = .never
    

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

  • 2

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

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

    • 选择视图控制器

    • 单击'Attributes Inspector'选项卡

    • 取消选中'Adjust Scroll View Insets'

    • 享受!

    enter image description here

  • 284

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

  • 2

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

  • 0

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

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

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

    before

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

    after

    似乎将表视图放在第一个位置导致了麻烦,并将表视图移动到另一个位置解决了问题 .

    P.D.我没有使用autoLayout和故事板

    希望这可以帮助别人!

  • 11

    我也面临这个问题 .

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

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

    • 将可滚动内容嵌入 UIView (我将其重命名为 ContentView

    • 添加约束:

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

    enter image description here

  • 1

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

  • 0

    谢谢你们的解决方案!我努力解决问题几个小时 . 当没有涉及导航栏时,一切都很好但是它已经完成了我将ViewController嵌入到NavigationController中的那一刻 .

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

相关问题