Ios 如何使用自动布局将多个视图与背景图像元素对齐?

Ios 如何使用自动布局将多个视图与背景图像元素对齐?,ios,xcode,autolayout,Ios,Xcode,Autolayout,这是一个场景:我有一个背景图像,有3个圆圈和3条水平线,在圆圈上方我有3个矩形视图。我希望矩形直接位于圆圈上方,大致与圆圈一样宽,在所有iPhone和iPad上高度相同(从第一个水平条到上边框)。我在草图中创建了一个示例作为视觉辅助。任何帮助都将不胜感激! 我尝试过的约束的具体问题是,顶部保持固定在顶部边缘,但底部约束实际上无法与不同的iPhone尺寸进行缩放。这里是另一个屏幕截图。 我使用的底部约束是一个垂直空间约束,第一项作为视图的底部,与矩形的底部具有相等的关系,它等于283个点。我理解

这是一个场景:我有一个背景图像,有3个圆圈和3条水平线,在圆圈上方我有3个矩形视图。我希望矩形直接位于圆圈上方,大致与圆圈一样宽,在所有iPhone和iPad上高度相同(从第一个水平条到上边框)。我在草图中创建了一个示例作为视觉辅助。任何帮助都将不胜感激!

我尝试过的约束的具体问题是,顶部保持固定在顶部边缘,但底部约束实际上无法与不同的iPhone尺寸进行缩放。这里是另一个屏幕截图。
我使用的底部约束是一个垂直空间约束,第一项作为视图的底部,与矩形的底部具有相等的关系,它等于283个点。我理解它为什么不起作用,283从底部到最后并不是在所有3个设备的同一个点上,但是我不知道如何修复它。

所以,基本上,当你改变ReCt的高度时,你需要考虑整个视图的高度。你会想要一个屏幕的设计高度,例如,我在这里选择600。因此,我将使用以下函数来计算当前设备的实际高度

    func actualHeight(height: CGFloat) -> CGFloat {
        return height / 600 * view.bounds.height
    }
因此,当您想将rect的高度设置为600中的100时,我会使用
actualHeight(100)

请记住,如果已经在interface builder中设置了高度约束,那么直接设置视图的高度将不起作用。一种方法是与警察合作。您必须为高度约束创建一个出口,并更改约束的
常量
属性

我在网上得到了这张图片,但它展示了如何为约束创建一个出口

因此您将拥有一个
IBOutlet

@IBOutlet weak var heightConstaint: NSLayoutConstraint!
你可以这样设置高度:

heightConstaint.constant = actualHeight(400)

如果不喜欢“高度约束”方法,可以使用“变换”:

// Scale the height by 1.1.
rect.transform = CGAffineTransformMakeScale(1.0, 1.1)

只要你的身高限制在IB中设置正确,这将在任何设备上进行缩放。

这是一个相当广泛的问题。发布您的代码尝试过的内容和面临的问题,有人会帮助您。就约束而言。。。您可以将对象的约束固定为等高等宽,也许您应该阅读自动布局教程,然后在尝试某项操作后返回遇到的问题。谢谢您的建议。我更新了我的帖子,更好地描述了我正在尝试做的事情和不起作用的事情。我希望这有助于解释问题。我希望矩形的宽度相等,但它们的高度是由代码中的一个变量驱动的,所以我希望它们的高度等于该值的高度,最小高度为0,最大高度等于第一行和边距顶部之间的距离,所以如果有意义的话,所有3个矩形的高度将始终不相等。请让我知道什么其他信息丢失,可能会有所帮助@布莱德·艾伦,又是你:)。我以为这和你遇到的问题是一样的?是的,又是我我试着应用与另一篇文章相同的逻辑,但我认为它不会起作用(我可能错了…)。另一篇文章中标签的大小应该彼此相等,但在这种情况下,大小将由代码中的值决定,我(认为)我只需要应用顶部和底部约束。这就是我需要指出正确方向的地方。@J.Wang,我是否提供了足够的信息?我同意MSU_Bulldog的观点,我原来的帖子似乎我还没有试过。我今天一整天都在摆弄它,不能让它做我想做的事!谢谢你的回复!今晚我回家后给你打个电话,这很有效。我们最终采用了一种组合方法,使用您的建议,拍摄背景图像并将其切成4块(就像我在上一个问题中建议的那样),这确实很有帮助。再次感谢你的帮助!