iOS自适应视图;自适应约束?
iOS adaptive view; adaptive constraints?
我想要实现的是基于布局中 4.7" 屏幕的 iPhone 自适应视图。
现在实现这一点很困难,这也是我第一次接触约束。
我不想使用自由格式,因为它对我来说太陌生了,而且我的目标不是 iPad。
此外,由于某些原因,我目前正在进行的项目不允许我切换到自由形式 viewcontroller 尺寸。
第一个是 iphone 4,没有基于 4.7" 布局的限制
第二个是 iphone 4,具有基于 4.7" 布局的约束
第三个是 iphone 6 布局显示的内容。
我想保持相同的一般距离,但最好缩小所有内容以匹配较小的屏幕尺寸。 (距离明智,而不是 button/text 尺寸等)
所以你可以看到我无论如何都取得了结果,但是我的顶部标签是从顶部测量的,按钮是从底部测量的,我尝试的任何其他操作似乎都会将其余按钮推到视野之外.
但是,我怎样才能以编程方式实现这个
if (iphone screen is 4.7") {
bottom constraint is 95px.height;
} else
if (iphone screen is 4.0") {
bottom constraint is 50px.height;
} else
if (iphone screen is 3.5") {
bottom constraint is 10px.height;
}
这就是我计划使我的应用程序具有自适应性的方式,但我也需要约束具有自适应性。如果我做错了,请指出正确的方向。
您可以通过多种方式来解决这个问题。一种方法是同时使用约束的乘数和常数来为这些屏幕尺寸提供正确的间距。如果你求解这两个方程,
480x + y = 470(480 - 您想要的底部约束为 10)和
667x + y = 572(667 - 你想要的底部约束 95)
x 的值为 0.5455,y 的值为 208.2。如果将它们代入其他方程式 (568x + y = 518),结果也非常接近。所以对于那个底部约束,你想要
button bottom = superview bottom * 0.5455 + 208.2
您可以在 IB 中通过向底部按钮(或标签)添加底部约束并对其进行编辑以更改乘数和常量值来实现这一点。您可以对顶视图执行相同的操作,使其与屏幕尺寸成比例,但请注意,您实际上需要对超级视图的底部进行约束,因为 superview.top 的值为 0,因此使用乘数对你没有好处。要 space 所有视图均匀分布在两者之间,最好的方法是使用 spacer 视图(如果你在 SO 上搜索 "space views evenly",你会找到一些解释这一点的答案)。
执行此操作的另一种方法可能是使用 table 视图而不是单独的标签和按钮。这种方法的优点是视图(在本例中为单元格)将自动 spaced 均匀分布(基于行高)。您仍然可以像我上面概述的那样将 table 视图约束赋予顶部和底部,或者只是将其垂直居中,并使其高度与超级视图的高度成比例。我认为这可能是更好、当然更简单的方法。如果您使 table 视图不滚动,并且没有单元格分隔符,它看起来就像其他方法一样。
我想要实现的是基于布局中 4.7" 屏幕的 iPhone 自适应视图。
现在实现这一点很困难,这也是我第一次接触约束。
我不想使用自由格式,因为它对我来说太陌生了,而且我的目标不是 iPad。
此外,由于某些原因,我目前正在进行的项目不允许我切换到自由形式 viewcontroller 尺寸。
第一个是 iphone 4,没有基于 4.7" 布局的限制 第二个是 iphone 4,具有基于 4.7" 布局的约束 第三个是 iphone 6 布局显示的内容。
我想保持相同的一般距离,但最好缩小所有内容以匹配较小的屏幕尺寸。 (距离明智,而不是 button/text 尺寸等)
所以你可以看到我无论如何都取得了结果,但是我的顶部标签是从顶部测量的,按钮是从底部测量的,我尝试的任何其他操作似乎都会将其余按钮推到视野之外.
但是,我怎样才能以编程方式实现这个
if (iphone screen is 4.7") {
bottom constraint is 95px.height;
} else
if (iphone screen is 4.0") {
bottom constraint is 50px.height;
} else
if (iphone screen is 3.5") {
bottom constraint is 10px.height;
}
这就是我计划使我的应用程序具有自适应性的方式,但我也需要约束具有自适应性。如果我做错了,请指出正确的方向。
您可以通过多种方式来解决这个问题。一种方法是同时使用约束的乘数和常数来为这些屏幕尺寸提供正确的间距。如果你求解这两个方程,
480x + y = 470(480 - 您想要的底部约束为 10)和
667x + y = 572(667 - 你想要的底部约束 95)
x 的值为 0.5455,y 的值为 208.2。如果将它们代入其他方程式 (568x + y = 518),结果也非常接近。所以对于那个底部约束,你想要
button bottom = superview bottom * 0.5455 + 208.2
您可以在 IB 中通过向底部按钮(或标签)添加底部约束并对其进行编辑以更改乘数和常量值来实现这一点。您可以对顶视图执行相同的操作,使其与屏幕尺寸成比例,但请注意,您实际上需要对超级视图的底部进行约束,因为 superview.top 的值为 0,因此使用乘数对你没有好处。要 space 所有视图均匀分布在两者之间,最好的方法是使用 spacer 视图(如果你在 SO 上搜索 "space views evenly",你会找到一些解释这一点的答案)。
执行此操作的另一种方法可能是使用 table 视图而不是单独的标签和按钮。这种方法的优点是视图(在本例中为单元格)将自动 spaced 均匀分布(基于行高)。您仍然可以像我上面概述的那样将 table 视图约束赋予顶部和底部,或者只是将其垂直居中,并使其高度与超级视图的高度成比例。我认为这可能是更好、当然更简单的方法。如果您使 table 视图不滚动,并且没有单元格分隔符,它看起来就像其他方法一样。