UIImageView 周围的填充。斯威夫特 3
Posted
技术标签:
【中文标题】UIImageView 周围的填充。斯威夫特 3【英文标题】:Padding around UIImageView. Swift 3 【发布时间】:2017-05-28 19:04:04 【问题描述】:我有一个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
。
非常感谢。
【问题讨论】:
layoutMargins
只影响使用它们的子视图。 UIImageView
以非 UIView 的方式在内部呈现图像,因此您应该按照下面的答案将其包装到 UIView
访问***.com/questions/46437504/…
【参考方案1】:
Swift 4.2 & 5
let imageView = UIImageView()
imageView.image = UIImage(named:
"image")?.withAlignmentRectInsets(UIEdgeInsets(top: -5, left: -5, bottom: -5,
right: -5))
插图应为负值
【讨论】:
【参考方案2】:您可以将 imageView 插入到视图中并将约束设置为边,保证方法:)
【讨论】:
多米尼克。谢谢。我是初学者,怎么把imageView放到view中? 您可以选择 imageView 并转到菜单,Editor > Embed In > View。这样做,您的 imageView 将被分配到一个新创建的视图中。但不要忘记重新应用约束。【参考方案3】:在新类中覆盖alignmentRectInsets
属性:
class PaddedImageView: UIImageView
override var alignmentRectInsets: UIEdgeInsets
return UIEdgeInsets(top: -10, left: -10, bottom: -10, right: -10)
【讨论】:
【参考方案4】: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】:Swift 5.4 和 Xcode 13
这是我构建的一个小助手扩展:
extension UIImage
func addPadding(_ padding: CGFloat) -> UIImage
let alignmentInset = UIEdgeInsets(top: -padding, left: -padding,
bottom: -padding, right: -padding)
return withAlignmentRectInsets(alignmentInset)
【讨论】:
以上是关于UIImageView 周围的填充。斯威夫特 3的主要内容,如果未能解决你的问题,请参考以下文章
UITableView - UITableViewCell.Style .subtitle - 如何使 UIImageView 循环? - 斯威夫特 5
在 UIImageView 上一致地居中 CALayer 子层