如何仅在 UIButton 中为标题的特定部分设置图像

Posted

技术标签:

【中文标题】如何仅在 UIButton 中为标题的特定部分设置图像【英文标题】:How to set image only for a certain part of title in UIButton 【发布时间】:2014-07-25 10:13:46 【问题描述】:

我有一个带有标题的 UIButton。 将其视为星期四 20。 有一张图片被设置为按钮的背景,这张图片的宽度调整了,内容模式是宽高比的。所以它显示为完整的按钮。 我的问题: 我只需要“20”部分的图像,而不是整个“Thu 20”。 如果你看到 iPad 日历,你就会明白这一点。 我该怎么做? 谢谢

【问题讨论】:

你可以在这里添加你的图片吗? @KathiravanG raw.githubusercontent.com/fggeraissate/FFCalendar/master/… 红圈你的图片对吗? 你希望红色圆圈只覆盖 20 对吗? 让我们continue this discussion in chat。 【参考方案1】:

除非属性字符串之类的东西具有在某些文本周围放置矩形的功能,否则我建议您创建一个自定义视图来处理此问题:

您需要一个视图,除了 2 个字符串,一个普通字符串和一个矩形字符串。然后插入一个普通标签,设置文本,调用sizeToFit。然后添加第二个标签并执行与第一个相同的操作,但最后将其放在第一个标签旁边。然后根据标签尺寸将图像视图添加到标签上。然后调整整个视图的大小以适应其上的所有视图。现在您可以将此自定义标签添加到按钮或您想要的任何位置...

【讨论】:

【参考方案2】:

我宁愿建议你放置一个包含你的图像的图像视图,然后在图像顶部放置一个标签,上面有你的“20”,然后在两者的顶部放置一个没有背景颜色和没有图像的自定义 UIButton

【讨论】:

【参考方案3】:

通过一些工作,您可以覆盖这些UIButton 方法之一,以将图像放置在正确的位置。使用UILabel 中的方法来确定“20”的坐标将给出图像的位置。

class UIButton 

    // these return the rectangle for the background (assumes bounds), the content (image + title) and for the image and title separately. the content rect is calculated based
    // on the title and image size and padding and then adjusted based on the control content alignment. there are no draw methods since the contents
    // are rendered in separate subviews (UIImageView, UILabel)

    open func backgroundRect(forBounds bounds: CGRect) -> CGRect

    open func contentRect(forBounds bounds: CGRect) -> CGRect

    open func titleRect(forContentRect contentRect: CGRect) -> CGRect

    open func imageRect(forContentRect contentRect: CGRect) -> CGRect

有关这些方法的更多信息,请参阅 Apple 的 Documentation“获取维度”。

【讨论】:

以上是关于如何仅在 UIButton 中为标题的特定部分设置图像的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 如何使 UIButton 仅在附加的图像上点击交互并忽略透明部分

如何将 UILabel 和 UIButton 项都放入 UITableView 标题部分的 UIView

如何在 iOS 的 UITableView Cell 中为 UIButton 设置标签值?

在 Swift 中为 UIButton 设置动画

如何在 iphone 5s 和 iphone X 的情节提要中为 uibutton 设置不同的大小?

如何在 Storyboard 场景中为 UIButton 编写代码