ios - Swift:StackView 中的单选按钮显示不正确

标签 ios swift stackview

我在 stackView 中创建了一个单选按钮列表,但我不明白为什么它们显示错误,它们没有正确对齐

我希望我所有的按钮都在左侧正确对齐,因为我可以解决这个问题谢谢! And here is the result in photo:

部分代码如下:

var buttons = [UIButton]()
var titles = ["Lasy", "What I've been told", "I'm do into it", "Close the best i can", "Hard core"]


func setupUI() {

    for title in titles {
        // create button
        let button = UIButton(type: .custom)
        button.setTitleColor(.black, for: .normal)
        button.setTitle(title, for: .normal)
        button.setImage(UIImage(named: "uncheck.png")!, for: .normal)

        // if the selected button cannot be reclick again, you can use .Disabled state
        button.setImage(UIImage(named: "check.png")!, for: .selected)
        button.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 35)
        button.addTarget(self, action: #selector(radioButtonAction), for: .touchUpInside)

        buttons.append(button)
    }

    for button in buttons {
        addArrangedSubview(button)
    }

    setupUserChoice()
}

func setupUserChoice(){
    if titles.contains(value) {
        let valueIndex = titles.index(of: value)

        radioButtonAction(sender: buttons[valueIndex!])
    }
}

func setStackView() {
    stackView.translatesAutoresizingMaskIntoConstraints = false
    stackView.axis = .vertical
    stackView.distribution = .fill
    stackView.spacing = 16.0
    stackView.alignment = .leading
}

最佳答案

问题在于您尝试设置 imageEdgeInsets 的方式。它只是调整图像位置,并没有相应地增加按钮的大小。要增加按钮的大小,您需要设置contentEdgeInsets。但是您还需要根据图像位置的变化调整标题位置。为此,您可以使用 titleEdgeInsets

因此删除代码 button.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 35) 并将其替换为:-

let leftPadding_beforeImage: CGFloat = 35
let gapBetweenImageAndTitle: CGFloat = 8
let rightPadding_afterTitle: CGFloat = 16

button.imageEdgeInsets = UIEdgeInsetsMake(0, leftPadding_beforeImage, 0, 0)
button.titleEdgeInsets = UIEdgeInsetsMake(0, (leftPadding_beforeImage+gapBetweenImageAndTitle), 0, -(leftPadding_beforeImage+gapBetweenImageAndTitle))
button.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, (leftPadding_beforeImage+gapBetweenImageAndTitle+rightPadding_afterTitle))

我希望变量名是不言自明的。如果你想了解更多关于 UIButton edgeInsets 的信息,我建议你阅读 this fantastic answer .

关于ios - Swift:StackView 中的单选按钮显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52131439/

相关文章:

ios - 在执行另一个方法时(动态地)更新标签文本

swift - 使用图层向 UIView 添加阴影

ios - Stackview 交换或更改 View 顺序

java - 在堆栈 View 中水平滑动

Android:如何创建可滑动堆栈 View ?

ios - 基础类(class)的扩展

ios - 键盘滞后三秒,首次仅使用 iPad - Obj-C

iphone - 排序 UITableView 不工作

swift - 将 url 从标记传递到 Controller

ios - 将 JSON 转换为 swift 对象的最佳方法是什么,同时检查键和值