如何使用约束AutoLayout在横向和纵向的情况下不使用代码指定不同的布局?

8
我有一个iPad应用程序,其中包含一个登录屏幕,登录控件包含在UIView中。
当iPad处于纵向方向时,我将Login UIView放置在应用程序底部和中心附近,几乎就在键盘上方,公司标志位于UIImageView中心位置。我使用AutoLayout约束使公司标志保持靠近顶部和右侧,而Login UIView保持靠近底部和右侧。 enter image description here
(来源: chattypics.com) 当我将其旋转到横向时,效果如下:

输入图像描述
(来源: chattypics.com)

我希望它看起来像这样

输入图像描述
(来源: chattypics.com)

因此,我希望这两个元素并排放置,并且在纵向模式下,我希望登录UIView的右侧间距小于横向模式下的间距,并且底部距离小于横向模式下的距离。我可以通过“在容器中心”来处理这个问题,但这也无法在横向模式下工作。

我使用了这篇文章中详细介绍的技术,在横向模式下使物品“并排”,但我认为这在此处不够用,因为我希望“视图”内的布局在旋转时也是不同的。
我可以想到编程方法来解决这个问题,但我不能想象这是多么独特的需求,所以是否有一些只使用IB中的约束就能实现的方法?可能涉及优先级?还是我需要在代码中解决这个问题?

我不确定是否可以在不编写代码的情况下实现此行为。您可能想查看我的回答:https://dev59.com/LGMm5IYBdhLWcg3wO9Aq#19719482 - knl
2个回答

5
您可以使用界面构建器中不同的约束优先级来实现这种行为。对于“公司标志”和“登录视图”两个视图,您需要设置“垂直居中于容器”和“水平居中于容器”的约束,同时将一些优先级降低。 接下来,您需要使用类似“小于或等于”的关系规则定义“垂直间距”和“水平间距”约束。
我只是使用界面构建器就实现了这样的行为。 演示此操作的视频Github上的源代码(我已在仅适用于iPhone的故事板中设置了它,但iPad的想法类似)。
此外,您可以使用不同的优先级结合“小于或等于”和“大于或等于”来实现最佳效果。

我尝试自己做这个,但中心y约束似乎给我带来了一些问题。 - BytesGuy

0

与其重新定位元素,似乎您只需要单独旋转它们。将它们设置在容器视图中,在视图控制器的视图中心设置容器视图。然后只需设置两个视图之间的距离并在它们上面设置自动旋转即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接