基于UIKit的TipKit提示框图片尺寸调整问题
解决TipKit提示框图片尺寸调整问题
方法一:通过TipDisplayOptions直接配置(推荐)
在UIKit中展示Tip时,直接通过TipDisplayOptions指定图片尺寸,无需修改Tip协议的image返回值:
// 替换为你的Tip实现类 let targetTip = YourCustomTip() // 设置目标图片尺寸,比如24x24 let displayOptions = TipDisplayOptions(imageSize: CGSize(width: 24, height: 24)) TipCenter.shared.showTip(targetTip, options: displayOptions)
这种方式直接控制TipKit的展示规则,图片会严格按照指定尺寸渲染,不会出现拉伸问题。
方法二:预调整图片尺寸后返回
如果需要在Tip协议的image属性中直接返回固定尺寸的图片,可以先将UIImage调整到目标大小,再转为SwiftUI的Image返回:
首先给UIImage添加扩展处理尺寸调整:
extension UIImage { func resized(to targetSize: CGSize) -> UIImage? { let format = UIGraphicsImageRendererFormat() format.scale = UIScreen.main.scale // 保持屏幕分辨率,避免模糊 let renderer = UIGraphicsImageRenderer(size: targetSize, format: format) return renderer.image { context in self.draw(in: CGRect(origin: .zero, size: targetSize)) } } }
然后在你的Tip实现中使用:
var image: Image? { guard let uiImage = UIImage(named: "tip-new-project")?.resized(to: CGSize(width: 24, height: 24)) else { return nil } return Image(uiImage: uiImage) }
为什么小图还是会被拉伸?
TipKit默认会将图片拉伸到内置的默认尺寸,所以即使你使用小尺寸资源,也会被强制放大到默认大小,导致拉伸变形。上面两种方法分别从展示配置和图片源处理两个角度解决了这个问题。
内容的提问来源于stack exchange,提问作者Mert Serin
相关产品推荐
相关产品推荐

