我正在为我的应用中的页面添加一个简单的更新按钮。该按钮有一个imageView,应该有一个标题"立即更新"在视图之上。
在视图层次结构中,我可以看到UILabel是UIButton的子视图。但是打印UILabel的描述会返回框架
(250 20; 283 0).
这是我的代码
let updateButton = UIButton()
updateButton.frame = CGRect(x: centreX(parent: self.view, width: 150), y: 200, width: 150, height: 40)
updateButton.setImage(UIImage(named:"my-image"), for: .normal)
updateButton.setTitle("Update Now", for: .normal)
updateButton.titleLabel?.sizeToFit()
updateButton.titleLabel?.frame = updateButton.frame
updateButton.setTitleColor(UIColor.black, for: .normal)
self.view.addSubview(updateButton)
我想到了两行
updateButton.titleLabel?.sizeToFit()
updateButton.titleLabel?.frame = updateButton.frame
会改变标签框架的高度。我在这里缺少什么吗?
使用Swift 3.0和iOS 10
答案 0 :(得分:2)
我认为您需要设置背景图像而不是如下图像
updateButton.setBackgroundImage(UIImage(named: "my-image"), for: .normal)
答案 1 :(得分:1)
我发现了这个问题。来自UIButton文档
提供标题字符串或图像;根据您的内容适当调整按钮大小。
这意味着只能设置其中一个属性。当我首先设置图像时,这就是显示的内容。这是我看不到标签的原因。
当我解决方法时,我有两个解决方案:
首先 - 使用标题并设置背景颜色
updateButton.setTitle("Update Now", for: .normal)
updateButton.setTitleColor(UIColor.white, for: .normal)
updateButton.backgroundColor = UIColor(patternImage: UIImage(named: "my-image")!)
这就是我用的。我不得不缩放背景图像以适应视图。
或者 - 创建一个结合立即更新文本的新图像
updateButton.setImage(UIImage(named:"my-new-image"), for: .normal)
我希望这有助于其他人。