如何在UIImageView中为UIImage添加带背景色的内边距以复刻iOS设置应用图标
如何在UIImageView中为UIImage添加带背景色的内边距以复刻iOS设置应用图标
我太懂你想要的效果了——就是iOS设置里那种精致的小图标:图标本身不大,周围围着一圈带颜色的圆角背景,图标和背景之间还有恰到好处的内边距对吧?你之前用withAlignmentRectInsets的思路其实偏了,这也是为啥背景色没法跟着内边距一起填充的原因,咱们来改改:
首先得搞清楚,withAlignmentRectInsets是用来调整视图布局时的对齐参考区域的,不是给图片加内边距的工具,它只会改变图片的布局框,不会让ImageView给图片留出显示空间。正确的做法是让ImageView自己控制内边距,这样背景色就能填满整个ImageView的圆角区域,图片乖乖待在中间的留白里。
给你调整后的代码,直接用就行:
// 1. 创建系统图片,不用修改对齐Insets let image = UIImage(systemName: "arrow.down")! // 2. 创建ImageView并配置基础属性 let imageView = UIImageView(image: image) imageView.tintColor = .white imageView.layer.cornerRadius = 5 imageView.contentMode = .scaleAspectFit imageView.backgroundColor = .systemPink imageView.translatesAutoresizingMaskIntoConstraints = false // 3. 关键:设置contentInsets,给图片留出内边距 imageView.contentInsets = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5) // 4. 添加到父视图并设置约束 addSubview(imageView) NSLayoutConstraint.activate([ imageView.widthAnchor.constraint(equalToConstant: 30), imageView.heightAnchor.constraint(equalToConstant: 30) ])
简单解释下改动点:
- 去掉了图片的
withAlignmentRectInsets调用,咱们不靠改图片来挤空间 - 给ImageView加了
contentInsets,这个属性就是用来控制图片在ImageView内部的边距的,你可以根据想要的留白大小调整数值 - 剩下的圆角、背景色、宽高约束都保留,现在背景色会填满整个30x30的圆角ImageView,图片在中间的留白区域显示,完美复刻设置里的小图标效果~
备注:内容来源于stack exchange,提问作者User95797654974
相关产品推荐
相关产品推荐

