UIButton + 斜体字体 = 剪裁

Posted

技术标签:

【中文标题】UIButton + 斜体字体 = 剪裁【英文标题】:UIButton + italic font = clipping 【发布时间】:2011-10-01 06:04:48 【问题描述】:

问题是当我使用像 Helvetica Oblique 这样大小大于 13 的斜体字体时,UIButton 会剪辑标题尾部(最后大约 1-2 个像素)。有人知道这个问题的解决方案吗?

【问题讨论】:

将换行模式设置为除尾截断以外的其他内容。 按钮够大吗?!如果你 设置文本和字体之前调用 sizeToFit,这是行不通的。 请提供更多详细信息,但我认为您的情况是“无论您制作的按钮有多宽,任何文本在制作成斜体时都会被剪辑在 UIButton 中” - 如果是这种情况,我不会不知道解决方法,这是一个错误,报告它 展示问题的图片也会有所帮助。 这是一个非常古老的问题。我相信它已经过时了。致@bshirley - 是的,不管按钮有多宽。 【参考方案1】:

子类 UIButton 类并覆盖 setTitle 为:

- (void)setTitle:(NSString *)title forState:(UIControlState)state [super setTitle:[NSString stringWithFormat:@" %@ ", title] forState:state];

这将在文本的两侧添加额外的空格。 简单易行。

【讨论】:

好主意。一种更简单的方法是在标准 UIButton 的标题前后放置一个空格。 很抱歉,但这不是一个真正的解决方案,充其量只是一种解决方法,并且在标题中填充空格以解决布局/绘图问题可能会在未来困扰您。【参考方案2】:

我的脚本字体有这个问题。不幸的是,没有一种简单的方法可以解决它。我尝试了一切,然后最终继承了 UIButton。您可以在此处阅读实现的详细信息:http://blog.tinymission.com/post/subclassing-uibutton

基本上,最简单的做法是将您自己的 UILabel 放在 UIButton 之上,但对我来说,这不会很好,所以我将 UIButton 子类化。

【讨论】:

【参考方案3】:

你可以通过设置 Uibutton 属性来设置斜体字体

button.titleLabel?.font = UIFont.italicSystemFont(ofSize: 17)

【讨论】:

【参考方案4】:
    创建UIButton 的自定义子类 覆盖方法:- (CGRect)titleRectForContentRect:(CGRect)contentRect

例子:

- (CGRect)titleRectForContentRect:(CGRect)contentRect

    CGFloat textX = 0;
    CGFloat textY = 0;
    CGFloat textW = self.width;
    CGFloat textH = contentRect.size.height;
    return CGRectMake(textX, textY, textW, textH);

【讨论】:

以上是关于UIButton + 斜体字体 = 剪裁的主要内容,如果未能解决你的问题,请参考以下文章

UIButton.titleLabel 阴影正在剪裁

旋转 UIButton titleLabel 而不剪裁

UIButton移动动画

UIButton 的渐变未显示

为 UIButton 设置 titleLabel

如何滚动到 UIScrollview 中的 UIButton 位置