自动布局 - 锚定到右下角
Posted
技术标签:
【中文标题】自动布局 - 锚定到右下角【英文标题】:Autolayout - anchoring to bottom right 【发布时间】: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
(当键盘显示向上移动内容时我确实设置了它)。但是,因为,正如我在问题中添加的那样,如果我删除了图像以纵向模式显示在右下角的约束,我认为这不适用。
你能帮我澄清一下这个视图是在滚动视图内还是浮动在它上面?
这个答案 (***.com/questions/15773815/…) 建议覆盖 viewDidLayoutSubviews
并设置 contentSize
可能有效。
OK - 我可以轻松地让视图浮动在滚动视图上方,但如果您希望视图位于滚动视图内,那么在使用 UIScrollView
和自动布局时会有一个问题。请参阅 Apple 关于该主题的技术说明(抱歉 - 没有时间编写一些示例代码):developer.apple.com/library/ios/technotes/tn2154/_index.html
【参考方案1】:
如果你想锚定到右下角,Programmatic autoresizingMask 对我来说更加一致。
它与 IB 稍微相反,所以如果你想锚定右下角,你希望左边距灵活,上边距灵活
yourView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;
这意味着下边距、右边距、高度和宽度都将保持不变,保持在视图的右下角。
【讨论】:
我试过了,但仍然没有显示任何内容。您确定我仍然可以在基于 AutoLayout 的故事板中使用自动调整大小的蒙版吗? 等等,你的 imageView 根本没有出现? 不。我可以在我的故事板中看到它(它是屏幕截图上的红色矩形),它没有隐藏,但我看不到它! 好吧,只是为了排除,你的故事板是 4 英寸(568 像素)和你的模拟器或设备是 3.5 英寸(480 像素) 不,这是一个 iPad 768x1024 故事板。以上是关于自动布局 - 锚定到右下角的主要内容,如果未能解决你的问题,请参考以下文章
如何将浮动操作按钮锚定到App ToolBar,就像在指南图像中一样?