自动布局 - 锚定到右下角

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,就像在指南图像中一样?

自动布局约束未正确放置容器视图

Swift - 根据其内容自动布局 UILabel 高度

以编程方式使用布局锚点的自动布局不起作用

我可以使用自动布局在 UIScrollView 中包含灵活空间吗?

如何在kivy中使用浮动布局在应用程序的左下角放置标签?