以剩余空间为中心

时间:2014-11-05 00:02:48

标签: ios iphone autolayout constraints

我有这个viewController,它在顶部显示一个navigationBar(顶部是白色框),底部是一个工具栏(图中的橙色框)。

因为navigationBar是iOS添加到viewController的东西,所以当viewController可见时,self.view的高位将被报告为屏幕尺寸减去44点。

我在视图中添加了一个imageView,我希望它集中在navigationBar和工具栏之间,如下图所示。

enter image description here

我所做的是添加一个约束来垂直集中imageView。正如您在图片中看到的那样,Xcode显示imageView完全垂直居中,但这不是应用程序运行时发生的情况(感谢Apple)。

实际情况就是这样:假设我在iPhone 5上运行它.iPhone的5屏高度是568点。因为有一个导航栏,self.view的高度将是524 pt(568 - 44)。约束愚蠢地将忽略导航栏所在的前44个像素,并将imageView集中在navigationBar底部和工具栏顶部之间。结果是imageView将更接近底部。

当应用程序在iPhone 4上运行时,会仔细选择此imageView以完全填充工具栏和navigationBar之间的空间。此imageView必须遵守宽高比约束。完全是这样的:

enter image description here

我没有使用垂直居中的约束来集中imageView,而是尝试向superview添加顶部约束,为工具栏添加底部约束。除了iPhone 4之外,所有iPhone都可以正常工作,其中这两个约束强制将imageView转换为另一个宽高比,如下所示:

enter image description here

那么,我必须对imageView应用什么样的约束才能使其在navigationBar和工具栏之间的空间中居中而不会丢失宽高比?

1 个答案:

答案 0 :(得分:1)

如果希望视图在导航栏和工具栏之间居中,则取消选择控制器的“在顶部条形图下”和“在底部条形图下”。在图像视图中添加一个centerY约束,为2个边赋予0长度间距约束,最后为宽高比约束。我对此进行了测试,它适用于各种尺寸,宽高比为1:1。如果你想要一个更高的宽高比(你的图像看起来像~1:1.2 w:h)那么你需要做一些额外的工作才能使它适合3.5英寸的屏幕,因为没有足够的高度来获得与图像视图为全宽(假设您还显示状态栏 - 如果没有,则这些约束应适用于3.5“屏幕)。我可以编辑我的答案,包括如何做到这一点,如果你说你想要什么宽高比,如果你想要两个条之间的最小间距,或者你是否希望图像视图尽可能宽,同时仍然保持其纵横比(这意味着两个柱子没有空间)。