为啥一个带有图像的按钮会导致 titleLable 文本被截断?

Posted

技术标签:

【中文标题】为啥一个带有图像的按钮会导致 titleLable 文本被截断?【英文标题】:Why is a button with an image in it making the titleLable text cut off?为什么一个带有图像的按钮会导致 titleLable 文本被截断? 【发布时间】:2017-07-19 04:57:47 【问题描述】:

我在下面有这段代码,它在代码中创建了一个按钮,并将该按钮置于其父视图的中间:

let cameraButton: UIButton = 
        let button = UIButton()
        button.setImage(UIImage(named: "cam"), for: .normal)
        button.setTitle("Take Pic", for: .normal)
        button.setTitleColor(UIColor.black, for: .normal)
        button.translatesAutoresizingMaskIntoConstraints = false
        button.titleEdgeInsets = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 0)
        return button
()

override func viewWillLayoutSubviews() 
        super.viewWillLayoutSubviews()
        view.addSubview(cameraButton)
        cameraButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        cameraButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true

一切正常(如按钮在视图中心居中),但由于某种原因,titleLabel 文本被截断(如下图所示):

我认为按钮具有固有的宽度和高度,那么为什么 titleLabel 会在这里被截断?宽度不应该只是根据其中的内容(imageView 和标签)扩展吗?有人可以建议我解决此问题的方法吗?

【问题讨论】:

如果您不想更改按钮框架,也可以设置字体大小。 所以我已经为按钮指定了宽度和高度? 请在给出图像和文本后尝试 cameraButton.sizeToFit() 我在view.addSubview(cameraButton) 之后添加了cameraButton.sizeToFit(),但这也没有解决问题。 您必须从情节提要或以编程方式调整按钮宽度、标题插图和图像插图。 【参考方案1】:

尝试设置以下属性

        cameraButton.titleLabel!.numberOfLines = 0
        cameraButton.titleLabel!.adjustsFontSizeToFitWidth = true
        cameraButton.titleLabel!.lineBreakMode = NSLineBreakMode.byWordWrapping

【讨论】:

我只使用了cameraButton.titleLabel!.adjustsFontSizeToFitWidth = true。我希望所有内容都在同一行,所以我没有使用numberOfLines = 0,默认值已经是 1。 帮助很大。谢谢!我也想成为同一行的文字,所以只用了cameraButton.titleLabel!.adjustsFontSizeToFitWidth = true

以上是关于为啥一个带有图像的按钮会导致 titleLable 文本被截断?的主要内容,如果未能解决你的问题,请参考以下文章

为啥为所有四个边添加约束会导致错误?

为啥这会导致内存泄漏?

为啥使用 QQuickWindow::grabWindow() 会导致窗口变成图像?

为啥此裁剪代码会导致图像旋转?

使用带有自动布局的推送时隐藏按钮时,约束更新导致项目移动

为啥用户点击后按钮图像会恢复?