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

Tom*_*idd 8 ipad ios landscape-portrait autolayout

我有一个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右侧的间距量大于我想要的横向模式,并且距离底部的距离小于我想要的横向模式.我可以通过"容器中心"来处理这个问题,但这在横向模式下也不起作用.

在横向模式中,我使用了这篇文章中详细介绍的技术使事情"并排",但我不相信这就足够了,因为我希望"视图"中的布局在旋转时也是不同的.

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

yas*_*375 5

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

我只是使用Interface Builder实现了这种行为.

您还可以使用不同的优先级将"小于或等于"与"大于或等于"组合以获得最佳结果.


con*_*are 0

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