将XIB的UIScrollView添加到视图时设置contentSize

时间:2014-11-10 19:49:32

标签: ios uiscrollview

我在iOS 7.0,Xcode 5.1.1。

在此设置中,我刚刚完成了一个示例,其中我有一个故事板,可以从XIB加载其主视图。我这样做是通过删除使用视图控制器的故事板中场景中的主视图。

在这种情况下,Cocoa为视图控制器加载XIB,结果非常好。

理想情况下,我希望XIB中的第一个视图是显示设备框架的正确大小,而XIB中的第二个视图是UIScrollView。

我已为此XIB关闭了自动布局,因此scrollView实际上会滚动。

我的XIB的第一个视图高度为568像素。 scrollView的高度为1650像素。

让我感到困惑的是,我无法将scrollView的contentSize设置为1650并让scrollView滚动整个scrollview。

奇怪的是,我必须这样做: self.myScrollView.contentSize = CGSizeMake(self.view.frame.size.width,1660 + (self.view.frame.size.height) * 2);

这是2796。

如下所示:

(lldb)po self.myScrollView

UIScrollView:0x10953e9c0; frame =(0 64; 320 1650);

(lldb)po self.myScrollView.contentSize (宽度= 320,身高= 2796)`

关于我在这里摧毁视图mojo的哪一部分的任何想法?

1 个答案:

答案 0 :(得分:3)

更新回复

我不能100%清楚地保存滚动视图的xib中的设置,但我假设如下:

  • 您有一个UIView(在aView中调用),屏幕尺寸为320 x 568像素;
  • 然后你有一个UIScrollView,屏幕尺寸为320 x 1650像素。
  • 您已将滚动视图添加到aView,以便它是aView的唯一子视图。这应该意味着并非所有滚动视图都可见 - 只有前568个像素(垂直)。

假设上述情况,我建议如下:

  1. 确保滚动视图的上边缘与aView齐平。你可能已经做到了,但值得检查。选择滚动视图,然后转到尺寸检查器,确保除高度和宽度外的所有内容都为零

  2. 在我的应用程序中使用上面的设置,我只需要viewDidLoad中的以下两行来滚动滚动视图:

     self.sv.frame = CGRectMake(0, 0, 320, 568);
     self.sv.contentSize = CGSizeMake(320, 1650); 
    

    请特别注意滚动视图的frame的大小,它不是1650,它是您希望滚动视图在其显示时所占用的大小。在屏幕上。

  3. 如果我误解了设置,而这不是您尝试做的事情,那么您应该编辑您的问题以澄清。最后,我注意到您在问题中未提及的滚动视图的propertycenter属性。 boundsframecenter都是相互关联的。尝试记录这三个。我的猜测是,当您设置框架时,center会受到影响,这就是您必须对滚动视图的大小进行奇怪调整的原因。假设滚动视图覆盖整个屏幕,则中心应为(160,284) - 即frame的中点。在这种情况下,它不应该是负面的。

    初步回复

    您的问题暗示您使用滚动视图与自动布局一起运气不佳:

    我已关闭此XIB的自动布局,因此scrollView实际上会滚动。

    事实上,滚动视图与自动布局完全兼容,您只需要确保已经完成了一些事情,并且没有完成其他一些事情。我感谢下面的步骤为您提出的问题提供间接而非直接的解决方案,但是如果您可以使用自动布局/滚动视图设置工作,您当前的问题将会消失。

    第1步。 选择视图控制器对象并将其大小设置为自由格式属性检查器 - > 模拟指标 - > 大小

    第2步。只要需要保持整个可滚动区域(在您的情况下为1650)

    ,请创建视图控制器

    第3步。将滚动视图添加到控制器view,并使其覆盖整个视图区域。不要添加任何约束,但它的高度也应该是1650。

    第4步。使用“自动布局”将滚动视图的边缘固定到其超级视图(执行 NOT 设置滚动视图的任何宽度或高度属性)

    第5步。为滚动视图提供内容视图通常是一个好主意,因此在滚动视图中添加子视图视图并使其覆盖整个滚动视图。这是包含可滚动内容(控件,文本等)的视图

    第6步。以与约束滚动视图相同的方式约束内容视图,但这次, DO 设置明确的高度和宽度(高度应为1650)

    请注意,您在任何时候都没有设置滚动视图contentSize,也没有为滚动视图指定明确的高度或宽度。 {I}值是根据您在步骤6中的内容视图上设置的高度限制为您计算的。