【发布时间】:2014-03-06 17:24:05
【问题描述】:
我正在开发一个针对 iOS6/7 的应用程序,我花了两个小时盯着情节提要,试图理解为什么自动布局不符合我的要求。
基本上,我有一个包含滚动视图的场景,在其中,我希望在右下角锚定一个 UIIMage。因此,我为图像设置了四个约束:
- 宽度等于
- 高度等于
- 超级视图和底部空间
- 超级视图的尾随空间
XCode 不会抱怨定位问题,所以我满怀信心地运行我的应用程序,却发现它没有以任何方向显示。它只是无处可寻!
我知道要找到自动布局如何实现约束并发挥其魔力,我必须检查 view.bounds rect。我检查了 viewDidAppear 事件,发现它的值符合预期:
图像位置为:0.000000,0.000000 106.000000x103.000000
框架当然是在故事板中的实际位置,我猜这是意料之中的。
这是我的故事板的屏幕截图:
有什么想法吗?
更新: 更多信息: 如果我删除所有约束并运行应用程序,图像视图会以纵向显示在我的视图的右下角,但在旋转时,正如预期的那样,它不会显示。
更新 2: 这一切都应该落在可怕的 UIScrollView 和 AutoLayout 线程中。最后,我恢复使用 UIView,其中有一个 UIScrollView,其中包含我想要滚动的所有内容(这样在横向模式下键盘不会隐藏任何文本字段)。我想要锚定在底部的图像留在了容器 UIView 中,一切都按预期工作。
【问题讨论】:
-
请在
ViewDidAppear中记录view.frame(而不是view.bounds),因为这是在superview 的坐标系中(所以它会告诉你视图在哪里)。另外,你设置滚动视图的contentSize了吗? -
在记录 view.frame 时,它会显示我在故事板中定义的初始大小和位置,但据我所知,这是意料之中的。使用 AutoLayout 时,通过检查 view.frane 无法获取视图的当前位置。我还没有设置滚动视图的
contentSize(当键盘显示向上移动内容时我确实设置了它)。但是,因为,正如我在问题中添加的那样,如果我删除了图像以纵向模式显示在右下角的约束,我认为这不适用。 -
你能帮我澄清一下这个视图是在滚动视图内还是浮动在它上面?
-
这个答案 (stackoverflow.com/questions/15773815/…) 建议覆盖
viewDidLayoutSubviews并设置contentSize可能有效。 -
OK - 我可以轻松地让视图浮动在滚动视图上方,但如果您希望视图位于滚动视图内,那么在使用
UIScrollView和自动布局时会有一个问题。请参阅 Apple 关于该主题的技术说明(抱歉 - 没有时间编写一些示例代码):developer.apple.com/library/ios/technotes/tn2154/_index.html
标签: ios objective-c xcode autolayout