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

时间:2013-10-14 16:05:11

标签: ios ipad autolayout landscape-portrait

我有一个iPad应用程序,它具有登录屏幕,登录控件包含在UIView中。

当iPad处于纵向时,我在应用程序的底部和中心附近有登录UIView,几乎就在键盘的正上方,公司徽标位于顶部中心的UIImageView中。我正在使用AutoLayout约束来保持公司徽标被吸引到顶部和右侧,并且Login UIView被吸引到底部和右侧。

http://chattypics.com/files/ipadportrait_0dzalz3ipx.png

当我将其旋转为横向时,效果如下:

http://chattypics.com/files/ipadlandscape1_j15ps5c95u.png

我希望它看起来像这样

http://chattypics.com/files/ipadlandscape2_sobufqkdhg.png

所以,我希望这两个元素是并排的,我希望Login UIView更加向右。在纵向模式下,UIView右侧的间距量大于我想要的横向模式,并且距离底部的距离小于我想要的横向模式。我可以通过“容器中心”来处理这个问题,但这在横向模式下也不起作用。

我在横向模式下使用了详细in this post的技术使事情“并排”,但我不相信这就足够了,因为我想要“视图”中的布局轮换也有所不同。

我可以想办法以编程方式解决这个问题,但是我无法想象这是一个独特的需求,所以是否有某些方法只使用IB中的约束来解决这个问题?有些“这就是IB中的限制因素设计的方式”,可能涉及优先事项?或者我只需要在代码中解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

您可以使用Interface Builder中的约束的不同优先级来实现此类行为。对于两个视图(“公司徽标”和“登录视图”),您需要设置“容器中的垂直中心”和“容器中的水平中心”约束,并降低优先级。 接下来,您需要使用具有“小于或等于”等关系的规则来定义“垂直空间”和“水平空间”约束。

我使用Interface Builder实现了这种行为。

此外,您可以使用不同的优先级将“小于或等于”与“大于或等于”相结合,以获得最佳效果。

答案 1 :(得分:0)

而不是重新定位元素,看起来你只需要单独旋转它们。在容器视图中设置它们,在视图控制器视图中居中容器视图。然后只需设置两个视图之间的距离,并在它们上设置自动旋转。