为什么UIScrollView不能垂直滚动(使用自动布局)?

Nav*_*Nav 3 objective-c uiscrollview ios autolayout

截图

我的视图层次结构是

UIView

       UIScrollView

           UIView1

               -->UIView1.1

               -->UILabel

               -->UILabel

               -->UILabel

               -->UILabel  (bottom)
Run Code Online (Sandbox Code Playgroud)

我正在使用Autolayout.我已经尝试了所有的方法,并搜索了很多.我确实将底部UILabel连接到UIView1的底部布局,并将其优先级设置为750(最低的).我几乎尝试过在这个论坛和各地都说的一切,因为每个人都说同样的话.

我还在UIView1.1中动态添加了一个视图.我不知道为什么这不起作用.Scrollview无法正确滚动.请帮我.我被困在这3天了.

joe*_*ern 14

实现这项工作实际上非常简单.您不需要将所有标签放入额外的视图中.而且你不需要contentSize自己设定.自动布局将为您完成此操作.

你必须确保有以下几点:

  1. 每个标签,并在标签上的顶视图必须有一个 宽度被设置为滚动视图的宽度和约束值为0约束(或者你可能要添加任何填充)
  2. 顶部视图需要值0 的顶部约束
  3. 底部标签需要值为0 的底部约束

就这样!

这是一个显示约束的草图:

在此输入图像描述

如果您在自动布局中使用MasonrySnapKit,那么这些约束将如何添加到代码中:

topView.snp_makeConstraints { (make) -> Void in
    make.top.equalTo(0)
    make.left.equalTo(0)
    make.width.equalTo(scrollView)
}
label1.snp_makeConstraints { (make) -> Void in
    make.top.equalTo(topView.snp_bottom)
    make.left.equalTo(0)
    make.width.equalTo(scrollView)
}
label2.snp_makeConstraints { (make) -> Void in
   make.top.equalTo(label1.snp_bottom)
   make.left.equalTo(0)
   make.width.equalTo(scrollView)
}
label3.snp_makeConstraints { (make) -> Void in
    make.top.equalTo(label2.snp_bottom)
    make.left.equalTo(0)
    make.width.equalTo(scrollView)
    make.bottom.equalTo(0)
}
Run Code Online (Sandbox Code Playgroud)


Nav*_*Nav 5

 scrollView.contentSize=CGSizeMake(320,758);
 scrollView.contentInset=UIEdgeInsetsMake(64.0,0.0,44.0,0.0);
Run Code Online (Sandbox Code Playgroud)

最后这些线条救了我.

  • 太棒了,你找到了解决方案.然而,这种解决方案并不理想.由于固定的尺寸,这将不适用于不同的屏幕尺寸(如iPhone 5,iPhone 6和iPhone 6 Plus).它也会在您的标签文本中断,并且因为它们的高度会发生变化.请查看我的答案,以获得更强大的解决方案. (3认同)
  • 您的解决方案适合您,这很好.但是,如果您正在使用自动布局,则应该从它为您提供的功能中受益.你真的不应该自己计算contentSize.懒惰,让Auto Layout处理;-) (2认同)