当每侧的填充需要不同时,如何修复 iOS 15.0 中弃用的 ImageEdgeInsets?[复制]

How do I fix ImageEdgeInsets deprecated in iOS 15.0 when the padding needs to be different on each side? [duplicate]

提问人:Joakim Sjöstedt 提问时间:9/21/2023 最后编辑:Joakim Sjöstedt 更新时间:9/22/2023 访问量:114

问:

所以在.现在代码如下所示:imageEdgeInsetsiOS 15

class MyButton: UIButton {
    init(title: String) {
        super.init(frame: .zero)
        
        setTitle(title, for: .normal)
        setTitleColor(.white, for: .normal)
        backgroundColor = .blue
        layer.cornerRadius = 10
        
        setImage(UIImage(systemName: "heart.fill"), for: .normal)
        
        // This is depricated
        imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 40)
        
        configuration?.contentInsets = NSDirectionalEdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16)
        
        addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    @objc func buttonTapped() {
        print("Button tapped!")
    }
}

我一直在寻找解决方案,并在这里找到了一个:

“imageEdgeInsets”在 iOS 15.0 中已弃用

显然我们应该改用。因此,我们应该使用 .configuration?.imagePaddingconfiguration?.contentInsets = NSDirectionalEdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16)configuration?.imagePadding = 0

我想你已经可以发现问题了:只需要一个,所以如果你想在不同的侧面有不同的填充,就像这样:你不走运。configuration?.imagePaddingCGFloatNSDirectionalEdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16)

那么,如何摆脱弃用,同时保留所有边的不同填充呢?

注意*** 问题是一样的titleEdgeInsets

此外,使用后它似乎什么也做不了,而工作就像一个魅力。configuration?.imagePaddingNSDirectionalEdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16)

enter image description here

iOS Swift UIBubutton 已弃用

评论

0赞 HangarRash 9/22/2023
你能用你尝试创建的按钮的图片来更新你的问题吗?目前尚不清楚您有一个仅包含图像的按钮,还是一个同时包含标题和图像的按钮。如果两者兼而有之,您想要什么实际安排?一张图片将有助于澄清你的问题。
0赞 Joakim Sjöstedt 9/22/2023
当然,我添加了它。但这只是为了测试。

答:

1赞 vadian 9/22/2023 #1

替换是图像的组合placement

configuration?.imagePlacement = .leading

以及图像和文本之间的距离

configuration?.imagePadding = 12.0
  • imagePlacement指定图像相对于文本的位置。
  • imagePadding指定图像和文本之间的距离。
  • contentInsets指定图像和文本到按钮边缘的距离。

评论

0赞 Joakim Sjöstedt 9/22/2023
这很有趣,谢谢!但是,如果要设置多个填充怎么办?将 imagePlacement 设置为 .trailing,然后在那里设置填充?