使用 swift 在 scrollview 内的 stackview 中更改 uibutton 中的标题

Changing title in uibutton in stackview inside scrollview using swift

你能帮我解释一下为什么按钮标题的填充不起作用吗?

我有下面的代码,我从那里更新了 n 次按钮的标题。按钮位于水平滚动视图内。在 scrollview 里面我有一个 stackview。从滚动条外部,我更新了标题和填充,这是我无法控制的。

问题如下:如果我为按钮提供了一个巨大的标题,然后更改为一个短标题,则填充不会像我在下面的代码中确定的那样更新。

    private func setupActionButtons(index: Int = 0, title: String = "") {
    
    allButtons[index].layer.cornerRadius = allButtons[0].bounds.height/2
    allButtons[index].layer.borderWidth = 1
    allButtons[index].layer.borderColor = UIColor.borderShortcutButton.cgColor
    allButtons[index].setTitleColor(.psGreyValueLabelFilled, for: .normal)
    if title != "" {
        allButtons[index].setTitle(title, for: .normal)
    }
    allButtons[index].titleEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    allButtons[index].contentEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 15)
    allButtons[index].imageEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0)
    
    allButtons[index].imageView?.contentMode = .scaleAspectFit
    allButtons[index].setImage(uiImage, for: .normal)
    allButtons[index].semanticContentAttribute = UIApplication.shared.userInterfaceLayoutDirection == .rightToLeft ? .forceLeftToRight : .forceRightToLeft
    
    allButtons[index].titleLabel?.font = UIFont.systemFont(ofSize: buttonFontSize, weight: UIFont.Weight.semibold)
    
    allButtons[index].tag = index
    allButtons[index].addTarget(self, action: #selector(self.handleSelectOption(sender:)), for: .touchUpInside)
    
}

更好地解释:当我为 stackview 中的两个按钮添加具有相似宽度的标题,然后我将其中一个按钮的标题更改为更小的宽度时,另一个按钮的宽度更大且填充更大另一个我改的排列正确。

问题是将堆栈视图的 Distribution 设置为 Fill Proportionally

将堆栈视图设置为 Fill,问题就消失了。

附带说明:忘记你听说过 Fill Proportionally ...这是堆栈视图最容易被误解和误用的设置,除非你确切地知道它是如何工作的以及你想要使用的确切原因它,你不会得到你想要的布局。