我在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的哪一部分的任何想法?
答案 0 :(得分:3)
我不能100%清楚地保存滚动视图的xib中的设置,但我假设如下:
UIView
(在aView
中调用),屏幕尺寸为320 x 568像素; UIScrollView
,屏幕尺寸为320 x 1650像素。 aView
,以便它是aView
的唯一子视图。这应该意味着并非所有滚动视图都可见 - 只有前568个像素(垂直)。假设上述情况,我建议如下:
确保滚动视图的上边缘与aView
齐平。你可能已经做到了,但值得检查。选择滚动视图,然后转到尺寸检查器,确保除高度和宽度外的所有内容都为零
在我的应用程序中使用上面的设置,我只需要viewDidLoad
中的以下两行来滚动滚动视图:
self.sv.frame = CGRectMake(0, 0, 320, 568);
self.sv.contentSize = CGSizeMake(320, 1650);
请特别注意滚动视图的frame
的大小,它不是1650
,它是您希望滚动视图在其显示时所占用的大小。在屏幕上。
如果我误解了设置,而这不是您尝试做的事情,那么您应该编辑您的问题以澄清。最后,我注意到您在问题中未提及的滚动视图的property
是center
属性。 bounds
,frame
和center
都是相互关联的。尝试记录这三个。我的猜测是,当您设置框架时,center
会受到影响,这就是您必须对滚动视图的大小进行奇怪调整的原因。假设滚动视图覆盖整个屏幕,则中心应为(160,284)
- 即frame
的中点。在这种情况下,它不应该是负面的。
您的问题暗示您使用滚动视图与自动布局一起运气不佳:
我已关闭此XIB的自动布局,因此scrollView实际上会滚动。
事实上,滚动视图与自动布局完全兼容,您只需要确保已经完成了一些事情,并且没有完成其他一些事情。我感谢下面的步骤为您提出的问题提供间接而非直接的解决方案,但是如果您可以使用自动布局/滚动视图设置工作,您当前的问题将会消失。
第1步。 选择视图控制器对象并将其大小设置为自由格式(属性检查器 - > 模拟指标 - > 大小)
第2步。只要需要保持整个可滚动区域(在您的情况下为1650)
,请创建视图控制器 第3步。将滚动视图添加到控制器view
,并使其覆盖整个视图区域。不要添加任何约束,但它的高度也应该是1650。
第4步。使用“自动布局”将滚动视图的边缘固定到其超级视图(执行 NOT 设置滚动视图的任何宽度或高度属性)
第5步。为滚动视图提供内容视图通常是一个好主意,因此在滚动视图中添加子视图视图并使其覆盖整个滚动视图。这是包含可滚动内容(控件,文本等)的视图
第6步。以与约束滚动视图相同的方式约束内容视图,但这次, DO 设置明确的高度和宽度(高度应为1650)
请注意,您在任何时候都没有设置滚动视图contentSize
,也没有为滚动视图指定明确的高度或宽度。 {I}值是根据您在步骤6中的内容视图上设置的高度限制为您计算的。