如何为 UIImageView 的水平对齐设置布局约束
How to setup layout constraints for a horizontal alignment of UIImageView's
我正在尝试使用 Swift 中的自动布局来实现如下图 (http://i.stack.imgur.com/jKmGO.png) 所示的内容,但每次我都会遇到一些问题。谁能告诉我为 3、4、5 或更多图像视图在水平网格中实现这种排列的自动布局的最佳方法。
试试下面的代码(水平排列)
var arrayOfImages = [image1,image2,image3,image4]
var previousImage:UIView? = nil
let horizontalSpaceBetweenImages = 20.0
let viewToUse = self.view //change this view to the one in which you are adding images as subviews
for image in arrayOfImages {
viewToUse.addSubview(image)
if previousItem == nil {
// this is the first item
viewToUse.addConstraint(NSLayoutConstraint(item: viewToUse, attribute: .Leading, relatedBy: .Equal, toItem: image, attribute: .Leading, multiplier: 1.0, constant: 0.0))
}
else {
viewToUse.addConstraint(NSLayoutConstraint(item: image, attribute: .Leading, relatedBy: .Equal, toItem: previousImage, attribute: .Trailing, multiplier: 1.0, constant: horizontalSpaceBetweenImages))
viewToUse.addConstraint(NSLayoutConstraint(item: image, attribute: .Width, relatedBy: .Equal, toItem: previousImage, attribute: .Width, multiplier: 1.0, constant: 0.0))
}
previousImage = image
}
// now add trailing constraint for last image
viewToUse.addConstraint(NSLayoutConstraint(item: arrayOfImages.last, attribute: .Trailing, relatedBy: .Equal, toItem: viewToUse, attribute: .Trailing, multiplier: 1.0, constant: 0.0))
此代码整理水平对齐方式。然后添加垂直对齐约束应该是微不足道的(它们应该更容易实现)
如果您要在视图中切换 3、4 和 5 个图像,collectionView 将是您的最佳选择。但是,如果您尝试显示一定数量的图像(UIImages 的数量保持不变),您可以尝试执行此方法:
此处的所有内容都将基于设备大小可用的水平距离。因此,首先,您需要确定图像的高度。高度是否需要相对于宽度?或者每张图片的高度可以保持不变吗?
如果高度需要相对于宽度保持不变,请对每个图像设置 "Aspect Ratio" 约束。如果高度可以保持不变,请在每个图像上放置 "height constraint"。
接下来您需要为图像之间的距离设置约束。
此时您仍然会遇到错误,因为每张图片的宽度都不明确。要解决此问题,select 同时添加所有图像,然后添加约束 "Equal Widths." 只要您确保图像固定在顶部,您就不会再遇到自动布局问题这点。
如果我可以更清楚地了解这些步骤,请告诉我。
尝试以下步骤
1)首先 select 所有这些并向图像添加约束 EQUAL WIDTH
2) 在左边距和第一个图像视图之间设置前导 space(设为 d)
3)类似地在右边距和最后一个图像视图之间设置尾随space(让它成为d)
4) 现在在所有图像视图之间添加约束 HORIZONTAL DISTANCE(d) 例如
左边距-d-IMAGE1-d-IMAGE2-d-IMAGE3-d-IMAGE4-d-右边距
查看 Stanford Cs193p 第 8 课。类似的东西被认为是一个基本的计算器,具有相同的宽度和高度的键。
我正在尝试使用 Swift 中的自动布局来实现如下图 (http://i.stack.imgur.com/jKmGO.png) 所示的内容,但每次我都会遇到一些问题。谁能告诉我为 3、4、5 或更多图像视图在水平网格中实现这种排列的自动布局的最佳方法。
试试下面的代码(水平排列)
var arrayOfImages = [image1,image2,image3,image4]
var previousImage:UIView? = nil
let horizontalSpaceBetweenImages = 20.0
let viewToUse = self.view //change this view to the one in which you are adding images as subviews
for image in arrayOfImages {
viewToUse.addSubview(image)
if previousItem == nil {
// this is the first item
viewToUse.addConstraint(NSLayoutConstraint(item: viewToUse, attribute: .Leading, relatedBy: .Equal, toItem: image, attribute: .Leading, multiplier: 1.0, constant: 0.0))
}
else {
viewToUse.addConstraint(NSLayoutConstraint(item: image, attribute: .Leading, relatedBy: .Equal, toItem: previousImage, attribute: .Trailing, multiplier: 1.0, constant: horizontalSpaceBetweenImages))
viewToUse.addConstraint(NSLayoutConstraint(item: image, attribute: .Width, relatedBy: .Equal, toItem: previousImage, attribute: .Width, multiplier: 1.0, constant: 0.0))
}
previousImage = image
}
// now add trailing constraint for last image
viewToUse.addConstraint(NSLayoutConstraint(item: arrayOfImages.last, attribute: .Trailing, relatedBy: .Equal, toItem: viewToUse, attribute: .Trailing, multiplier: 1.0, constant: 0.0))
此代码整理水平对齐方式。然后添加垂直对齐约束应该是微不足道的(它们应该更容易实现)
如果您要在视图中切换 3、4 和 5 个图像,collectionView 将是您的最佳选择。但是,如果您尝试显示一定数量的图像(UIImages 的数量保持不变),您可以尝试执行此方法:
此处的所有内容都将基于设备大小可用的水平距离。因此,首先,您需要确定图像的高度。高度是否需要相对于宽度?或者每张图片的高度可以保持不变吗?
如果高度需要相对于宽度保持不变,请对每个图像设置 "Aspect Ratio" 约束。如果高度可以保持不变,请在每个图像上放置 "height constraint"。
接下来您需要为图像之间的距离设置约束。
此时您仍然会遇到错误,因为每张图片的宽度都不明确。要解决此问题,select 同时添加所有图像,然后添加约束 "Equal Widths." 只要您确保图像固定在顶部,您就不会再遇到自动布局问题这点。
如果我可以更清楚地了解这些步骤,请告诉我。
尝试以下步骤 1)首先 select 所有这些并向图像添加约束 EQUAL WIDTH 2) 在左边距和第一个图像视图之间设置前导 space(设为 d) 3)类似地在右边距和最后一个图像视图之间设置尾随space(让它成为d) 4) 现在在所有图像视图之间添加约束 HORIZONTAL DISTANCE(d) 例如
左边距-d-IMAGE1-d-IMAGE2-d-IMAGE3-d-IMAGE4-d-右边距
查看 Stanford Cs193p 第 8 课。类似的东西被认为是一个基本的计算器,具有相同的宽度和高度的键。