Swift中UIButton设置自定义图片后还可使用setTitle设置文本吗
Swift按钮设置自定义图片后标题不显示的解决方案
setTitle方法本身可以正常使用,同时设置图片和标题时文本不显示,主要由布局逻辑、尺寸适配问题导致,对应解决方法如下:
- 优先检查按钮宽度是否足够:你当前的按钮宽度直接设为了图片宽度的1/3,UIButton默认是图片在左、文本在右横向排列,宽度仅够容纳图片的情况下,文本会被挤出按钮可视区域,自然无法显示。可先将按钮宽度调大验证,比如修改为
width: (myButtonImage?.size.width)!/3 + 100预留出文本显示空间。 - 调整图文布局偏移:如果需要固定按钮尺寸,可以通过
titleEdgeInsets和imageEdgeInsets两个属性调整图片和文本的位置,如需实现图片在上、文本在下的垂直布局,可参考以下代码调整:
let imageWidth = button.imageView?.frame.size.width ?? 0 let imageHeight = button.imageView?.frame.size.height ?? 0 let titleWidth = button.titleLabel?.intrinsicContentSize.width ?? 0 let titleHeight = button.titleLabel?.intrinsicContentSize.height ?? 0 // 调整偏移量实现图文垂直居中排布 button.imageEdgeInsets = UIEdgeInsets(top: -titleHeight/2, left: 0, bottom: titleHeight/2, right: -titleWidth) button.titleEdgeInsets = UIEdgeInsets(top: imageHeight/2, left: -imageWidth, bottom: -imageHeight/2, right: 0)
- iOS 15+优先使用
UIButton.Configuration管理布局:该API对图文布局的封装更清晰,不易出现布局冲突,示例代码如下:
var config = UIButton.Configuration.plain() config.image = myButtonImage config.title = "Test Button" config.baseForegroundColor = .black config.imagePadding = 8 // 设置图文间距 config.imagePlacement = .top // 可选:设置图片在文本上方 button.configuration = config
- 自定义类排查:确认你使用的
CreateButton自定义类没有重写titleLabel的隐藏属性,也没有在布局方法中覆盖文本显示区域,可打印button.titleLabel?.text确认文本是否被正确赋值,排除自定义类的兼容问题。
内容的提问来源于stack exchange,提问作者LuisC329
相关产品推荐
相关产品推荐

