Swift - 停止截断 UIButton titleLabel

问题描述 投票:0回答:1

我定义了以下 UIButton:

internal lazy var volumeUnitSelector: DropDownButton = {

    let button = DropDownButton()
    button.setTitle("impg", for: .normal)
    button.setTitleColor(UIColor.darkGreyWithDarkMode.withAlphaComponent(0.7), for: .normal)
    
    button.titleLabel?.font = .systemFont(ofSize: 14)
    button.titleLabel?.textAlignment = .right
    
    if #available(iOS 13.0, *) {
        let config = UIImage.SymbolConfiguration(pointSize: 8, weight: .black)
        let symbol = UIImage(systemName: "arrowtriangle.down.fill", withConfiguration: config)?.withTintColor(UIColor.darkGreyWithDarkMode, renderingMode: .alwaysOriginal)
        button.setImage(symbol, for: .normal)
    }
    return button
}()

这是 UIButton 的子类 DropDownButton 类:

class DropDownButton: UIButton {

    override func layoutSubviews() {
        self.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 9)    

        super.layoutSubviews()
        if imageView != nil {

            imageView?.translatesAutoresizingMaskIntoConstraints = false
            imageView?.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
            imageView?.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
            self.widthAnchor.constraint(equalToConstant: 43).isActive = true
        }
    }
}

这里是挑战 - 我正在尝试将此按钮设置为具有文本“impg”,然后是一个箭头以指示文本右侧的下拉菜单。如您所见,我将箭头添加为 SFSymbol 并将其固定在按钮的右侧。然后我需要将我的文本基本上固定到箭头图像的 leadingAnchor 上,边距很小(0.5 / 1 点)。

所以,我将右侧的 titleEdgeInset 设置为 9 以便为图像腾出空间。现在这是一种工作,但我不明白的是我的标题被剪掉了,当它应该有足够的空间时。

这是它目前的效果:

这里是 xCode 布局视图:

我不明白为什么文本左侧没有足够的空间来展开。我没有设置其他限制条件。

swift uibutton constraints sf-symbols
1个回答
0
投票

这是因为您在代码中添加了以下行:

self.widthAnchor.constraint(equalToConstant: 43).isActive = true

设置按钮的宽度而不是图像,因为它是 self.widthAnchor,这里 self 表示 UIButton。

© www.soinside.com 2019 - 2024. All rights reserved.