如何在Swift中设置UIButton的标题填充(插入)

rhfm7lfc  于 2023-01-01  发布在  Swift
关注(0)|答案(4)|浏览(167)

我是一个初学iOS的程序员,尝试开发一个iOS应用程序。我有几个按钮,我放在应用程序的主页上,就像在图片中。

请看红色的圆圈。2图片和标题之间没有空格(填充/插入)。
实际上,我已经用这个代码设置了图片和标题的插入。2但是,它没有给出任何不同的结果。

buttonDoctor.titleLabel?.numberOfLines = 2
    buttonDoctor.titleLabel?.lineBreakMode = .byWordWrapping
    buttonMedical.titleLabel?.numberOfLines = 2
    buttonMedical.titleLabel?.lineBreakMode = .byWordWrapping
    buttonQuestion.titleLabel?.numberOfLines = 2
    buttonQuestion.titleLabel?.lineBreakMode = .byWordWrapping
    buttonLocation.titleLabel?.numberOfLines = 2
    buttonLocation.titleLabel?.lineBreakMode = .byWordWrapping
    buttonPromotion.titleLabel?.numberOfLines = 2
    buttonPromotion.titleLabel?.lineBreakMode = .byWordWrapping
    buttonDoctor.image(for: .normal)
    buttonMedical.image(for: .normal)
    buttonQuestion.image(for: .normal)
    buttonLocation.image(for: .normal)
    buttonPromotion.image(for: .normal)
    //buttonDoctor.titleLabel?.adjustsFontSizeToFitWidth = true
    //buttonPromotion.titleLabel?.adjustsFontSizeToFitWidth = true
    //buttonLocation.titleLabel?.adjustsFontSizeToFitWidth = true
    //buttonQuestion.titleLabel?.adjustsFontSizeToFitWidth = true
    //buttonMedical.titleLabel?.adjustsFontSizeToFitWidth = true


    let btnimg = try? UIImage(named: "doctorschedule.png")
    var newimg = imageResize(image: btnimg!!, scaledTo: CGSize(width: 36, height: 36))
    buttonDoctor.setImage(newimg, for: .normal)
    buttonDoctor.contentMode = .scaleAspectFit
    buttonDoctor.imageEdgeInsets = UIEdgeInsetsMake(5, 3, 0, 5)
    buttonDoctor.titleEdgeInsets = UIEdgeInsetsMake(5, 3, 0, 0)

    let btnimg2 = try? UIImage(named: "medicalcheck.png")
    var newimg2 = imageResize(image: btnimg2!!, scaledTo: CGSize(width: 36, height: 36))
    buttonMedical.setImage(newimg2, for: .normal)
    buttonMedical.contentMode = .scaleAspectFit
    buttonMedical.imageEdgeInsets = UIEdgeInsetsMake(5, 3, 0, 5)
    buttonMedical.titleEdgeInsets = UIEdgeInsetsMake(5, 3, 0, 0)

    let btnimg3 = try? UIImage(named: "survey.png")
    var newimg3 = imageResize(image: btnimg3!!, scaledTo: CGSize(width: 36, height: 36))
    buttonQuestion.setImage(newimg3, for: .normal)
    buttonQuestion.contentMode = .scaleAspectFit
    buttonQuestion.imageEdgeInsets = UIEdgeInsetsMake(5, 3, 0, 5)
    buttonQuestion.titleEdgeInsets = UIEdgeInsetsMake(5, 3, 0, 0)

    let btnimg4 = try? UIImage(named: "location.png")
    var newimg4 = imageResize(image: btnimg4!!, scaledTo: CGSize(width: 36, height: 36))
    buttonLocation.setImage(newimg4, for: .normal)
    buttonLocation.contentMode = .scaleAspectFit
    buttonLocation.imageEdgeInsets = UIEdgeInsetsMake(5, 3, 0, 5)
    buttonLocation.titleEdgeInsets = UIEdgeInsetsMake(5, 3, 0, 0)

    let btnimg5 = try? UIImage(named: "promotion.png")
    var newimg5 = imageResize(image: btnimg5!!, scaledTo: CGSize(width: 36, height: 36))
    buttonPromotion.setImage(newimg5, for: .normal)
    buttonPromotion.contentMode = .scaleAspectFit
    buttonPromotion.imageEdgeInsets = UIEdgeInsetsMake(5, 3, 0, 5)
    buttonPromotion.titleEdgeInsets = UIEdgeInsetsMake(5, 3, 0, 0)

我已经尝试了几个值的插入,但它没有给不同的结果。我做了什么错误的代码?
请有人好心地帮助我如何解决这个问题。谢谢
注:我还有一个问题,我想在首页的顶部放一个图像标志(见橙色圆圈),但我不知道该怎么做。因为导航栏中没有插入图像的属性。仅供参考,它只是我从故事板中放入的UIViewController中的常规导航栏(不是UINavigationController)。如果你不介意的话,请给出一些建议。
注意:圆圈中的所有东西都是普通的UIBUTTON,而不是UIImage和UILabel或UIbutton。请看我的代码。

aydmsdu9

aydmsdu91#

对于编程解决方案,您使用的是:

dismissButton.titleEdgeInsets = UIEdgeInsets(top: 5, left: 10, bottom: 0, right: 10)

何时应使用:

someButton.contentEdgeInsets = UIEdgeInsets(top: 5, left: 10, bottom: 0, right: 10)

这是因为标题边缘插入(根据设计)在为文本调整大小后插入。
编辑:(iOS 15+)正如@SuryaKantSharma评论的那样,这已经被弃用。
配置按钮的新方法包括三个用于控制填充和插入的选项。

  • 标题填充:标题和副标题标签之间的距离。
  • 图像填充:按钮的图像和文本之间的距离
  • 内容插图:从按钮的内容区域到其边界的距离。

有关UIButton.Configuration的示例和说明,请查看此链接:
这是Sarun关于使用UIButton(UIKit)的三篇文章中的第一篇,值得一读!
https://sarunw.com/posts/new-way-to-style-uibutton-in-ios15/

8fsztsew

8fsztsew2#

    • 解决方案:**作为查询的解决方案,将left inset设置为10(仅用于标题)。将其他inset保留为0(或任何您想要的设置)

注:

  • "内容插页"适用于标题和图像。
  • "标题插入"仅适用于标题文本/字符串。
  • "图像插图"仅适用于图像/图标。

试试这个(使用Xcode 9+):
在故事板(Interface Builder)设计中,可以使用UIButton的属性设置inset,如下图所示。

l5tcr1uw

l5tcr1uw3#

将左右约束设置为0,文本将居中。

vjhs03f7

vjhs03f74#

除了@mozahler回答,只有这对我不起作用,必须添加1行,使其左对齐或右对齐:
(It将标题与按钮左侧对齐)
按钮。内容水平对齐方式= .left
按钮标题边缘插入= UI边缘插入(顶部:0,左侧:10,底部:5,右侧:5)

相关问题