我在 iOS 7.0,Xcode 5.1.1。
在这个设置中,我刚刚完成了一个示例,其中有一个 Storyboard,它从 XIB 加载其主视图。我通过删除 Storyboard 中使用 View Controller 的场景中的主视图来做到这一点。
在这种情况下,Cocoa 为 View Controller 加载了 XIB,结果非常好。
理想情况下,我希望 XIB 中的第一个 View 的大小适合显示设备的框架,而 XIB 中的第二个 View 是 UIScrollView。
我已经为这个 XIB 关闭了 Auto Layout,这样 scrollView 就会真正滚动。
我的 XIB 的第一个 View 高度为 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;帧 = (0 64; 320 1650);
(lldb) po self.myScrollView.contentSize
(宽度=320,高度=2796)`
关于我在这里破坏的 View 魔力的哪一部分有任何想法吗?
最佳答案
更新的回复
我对保存 ScrollView 的 xib 中的设置不是 100% 清楚,但我假设如下:
UIView
(调用 aView
)屏幕尺寸为 320 x 568 像素; UIScrollView
屏幕上的尺寸为 320 x 1650 像素。 aView
所以它是 aView
的唯一 subview .这应该意味着并不是所有的 ScrollView 都是可见的——只有前 568 个像素(垂直)。 假设上述情况,我建议以下内容:
aView
齐平。 .您可能已经这样做了,但值得检查。选择 ScrollView ,然后转到尺寸检查器,确保除了高度和宽度之外的所有内容都为零 viewDidLoad
中的以下两行让 ScrollView 滚动: self.sv.frame = CGRectMake(0, 0, 320, 568);
self.sv.contentSize = CGSizeMake(320, 1650);
特别注意
frame
的大小。 ScrollView ,它不是 1650
,这是您希望 ScrollView 在屏幕上占据的大小。 如果我误解了设置,而这不是您想要做的,您应该编辑您的问题以澄清。最后,我注意到
property
您在问题中没有提到的 ScrollView 是 center
属性(property)。 bounds
, frame
, 和 center
都是相互关联的。尝试记录所有三个。我的猜测是,当您设置框架时,center
受到影响,这就是为什么您必须对 ScrollView 的大小进行奇怪的调整。假设 ScrollView 覆盖整个屏幕,中心应该是(160,284)
- 即 frame
的中点.在这种情况下,它不应该是负面的。初步 react
您的问题意味着您将 ScrollView 与自动布局结合使用时运气不佳:
我已经为这个 XIB 关闭了 Auto Layout,这样 scrollView 就会真正滚动。
事实上, ScrollView 与自动布局完美兼容,您只需要确保您已经完成了几件事,未完成 其他几件事。我很欣赏以下步骤为您提出的问题提供了间接而非直接的解决方案,但如果您可以获得自动布局/ ScrollView 设置,您当前的问题将消失。
第一步 .
选择您的 View Controller 对象并将其大小设置为 Freeform (Attributes Inspector -> Simulated Metrics -> Size)
第二步 .制作您的 View Controller ,只要它需要保持整个可滚动区域(在您的情况下为 1650)
第三步 .将 ScrollView 添加到 Controller 的
view
并使其覆盖整个 View 区域。不要添加任何约束,但它的高度也应该是 1650。第 4 步 .使用 Auto Layout 将 ScrollView 的边缘固定到其父 View (执行 NOT 为 ScrollView 设置任何宽度或高度属性)
第五步 .给你的 ScrollView 一个内容 View 通常是个好主意,所以在 ScrollView 中添加一个 subview View ,让它覆盖整个 ScrollView 。这是包含可滚动内容(控件、文本等)的 View
第6步 .以与约束 ScrollView 相同的方式约束内容 View ,但这次是 做 设置明确的高度和宽度(高度应为 1650)
请注意,您在任何时候都没有设置 ScrollView
contentSize
,而且你也没有给你的 ScrollView 一个明确的高度或宽度。 contentSize
值是根据您在第 6 步中在内容 View 上设置的高度限制为您计算的。
关于ios - 将 XIB 的 UIScrollView 添加到 View 时设置 contentSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26851814/