我有一个
UIImageView
,我不希望图像“接触”视图的边缘,而是在它周围有一些“填充”。但是,我尝试了以下方法,但由于某种原因它没有改变:
@IBOutlet weak var pictureOutletOne: UIImageView!
//set the image
pictureOutletOne.image = UIImage(named: itemOne)
//set the padding
pictureOutletOne.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10);
我也试过:
pictureOutletOne.translatesAutoresizingMaskIntoConstraints = false
pictureOutletOne.layoutMargins = UIEdgeInsets(top: 10, left: 100, bottom: 10, right: 0)
我已经阅读了很多关于此的内容,但这些是我找到的解决方案,但它们不起作用。使用
Swift 3
.
非常感谢。
斯威夫特 4.2 和 5
let imageView = UIImageView()
imageView.image = UIImage(named:
"image")?.withAlignmentRectInsets(UIEdgeInsets(top: -5, left: -5, bottom: -5,
right: -5))
Insets 应为负值
您可以将 imageView 插入视图并为边设置约束,保证方法:)
在新类中覆盖
alignmentRectInsets
属性:
class PaddedImageView: UIImageView {
override var alignmentRectInsets: UIEdgeInsets {
return UIEdgeInsets(top: -10, left: -10, bottom: -10, right: -10)
}
}
这是我构建的一个小助手扩展:
extension UIImage {
func addPadding(_ padding: CGFloat) -> UIImage {
let alignmentInset = UIEdgeInsets(top: -padding, left: -padding,
bottom: -padding, right: -padding)
return withAlignmentRectInsets(alignmentInset)
}
}
let padding: CGFloat = 10
myImageView.contentMode = .scaleAspectFill
myImageView.image = UIImage(named: "myImage.png").resizableImage(withCapInsets: UIEdgeInsets(top: padding, left: padding, bottom: padding, right: padding), resizingMode: .stretch)
斯威夫特 5
在图像视图中的图像位置的右侧和左侧添加填充。
let image = UIImage(systemName: "circle.fill")
let insets = UIEdgeInsets(top: 0, left: -15, bottom: 0, right: -15)
let imageView = UIImageView(image: image.withAlignmentRectInsets(insets))
注意:UIStackView 尊重对齐插图作为图像视图的固有内容大小的贡献者。
用例示例:
在我的应用程序中,我有一个垂直堆叠,由一个小的居中对齐的
堆叠在一个UILabel
中的一个UIImageView
之上。标签宽度因单元格而异,不同的垂直堆栈宽度和移动图像的相应水平对齐方式。 IE。图像在表格中不对齐....通过使用水平对齐插图填充图像,它强制垂直堆栈具有大于最大预期标签宽度的一致宽度,从而使图像在表格中垂直居中对齐。UITableViewCell