如何在填充不同尺寸图像的Xcode按钮中自动布局?

时间:2015-10-29 15:23:36

标签: uibutton uiimage autolayout constraints xcode7

我正在研究一个在viewcontroller上有多个按钮的项目,我使用了autolayout。我希望所有按钮具有相同的宽度和高度,我有这样的水平/垂直间距:

add new constraints

多个设备上的结果如下:

preview of multiple devices

对于这个例子我给了按钮一个背景颜色,但实际上它们将填充各种尺寸的图像。我有按钮的图像资源(@ 1x / @ 2x / @ 3x)。例如,@ 2x图像资源永远不会大于100宽度和75高度(点)。

用户可以更改某些按钮图像。所以我希望按钮大小与内部图像“独立”。按钮不应根据图像“内部”调整大小。

所以我想首先(自动)布局按钮,而不会让图像“填充”按钮,这样按钮就会在我的项目中为最大尺寸的图像提供最佳尺寸(对于提到的@ 2x图像资源) :100宽度和75高度点。)

当我自动布局按钮,然后用图像填充它们时,xcode“想要”让我因为错误的视图而更新帧。我不希望图像影响自动布局。

如果我只是在模拟器或真正的iphone上运行应用程序,它运行正常。但我有所有这些错位的观点警告。我该怎么办?我将如何告诉' Xcode(7.1)图像不应影响按钮的宽度和高度?

我觉得我对这个(自动)布局问题有一点点错误的方法,但我还是不能指责它。我想我犯了某种逻辑错误。

首先(自动)布局按钮然后“填充”图像是不错的做法?或者我应该用图像和(自动)布局填充按钮?  这里有一个宽度和高度相等的图像示例: example with images

关于先前有关冲突约束的问题:

所以我希望这些按钮具有相同的宽度和高度:理想情况下为100宽度和75高度。宽度可以正常,但是当我使用autolayout用于不同大小的viewcontrollers(在其上有一个scrollview)时,高度有点困难。我想使用其他约束来说明&#39 ;;按钮的高度值不应低于75磅。如果我使用固定高度约束,等于或等于' 75分我得到了相同高度限制的冲突(当然)。我想我应该优先考虑,但我尝试过,但我还没有成功。

我该怎么办?

非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

问题1:

当然,当设置两个高度限制时,你会遇到冲突,其中一个计算到屏幕宽度的1/3(≈107px,不包括iPhone 4上的填充),另一个强制执行的最小高度大于此价值(例如120px)。

幸运的是,使用优先级

可以解决这个问题

将固定高度约束的优先级设置为低于“大于或等于”约束优先级的值。这样,autolayout将仅在其常量大于或等于“大于或等于”约束的常量时选择固定高度约束。否则,“大于或等于”约束的常量将用作视图的高度。有道理,对吗? :)

问题2:

通过对图像视图强制执行固定的高度和宽度,并将其内容模式设置为“Aspect Fit”,您可以按照第二个问题中的描述实现所需的行为。在Interface Builder中有一个下拉菜单:

Image Content Mode

在您的情况下,为图像视图提供固定尺寸的最佳方法是将所有四边固定到其超视图(因为superview具有明确定义的尺寸):

Image View with constraints

因此,当您将这些前导,尾随,顶部和底部约束应用于所有图像视图时,图像将根据约束自动调整大小,结果将如下所示:

Three image views in a row with constraints