2012-04-17 87 views
5

我为UIButton的标题使用自定义字体。它的作品,除了这个特殊的字体,第一个字符的一部分被裁剪。例如:裁剪后的UIButton标题

enter image description here

我尝试设置contentEdgeInsets和titleEdgeInsets似乎并不能得到它不会被截断。我也尝试将button.titleLabel.clipsToBounds属性设置为NO;

任何建议将不胜感激。

回答

8

所以我刚刚结束了设置UIButton标题为零,并将我自己的UILabel作为子视图添加到UIButton。我将UILabel框架设置为与按钮相同的尺寸,并将其设置为居中。

不是我确定的最优雅的解决方案,但它完成了工作。

+2

这真的很糟糕,这是唯一的解决方案。发生这种情况的原因是,字体设计师故意将其字母的边界编码为小于实际值,以便它们将嵌套。这对于斜体和草书字体尤其重要。我希望苹果公司在计算UIButton标签的宽度时不会那么“精确”,或者至少让我们自己去改变它。我正在提交一份错误报告,你也应该。 – Bek 2013-03-07 18:26:20

1

它看起来像我的喜欢你的内容是funkily调整。如果标签的框架不能直接访问,请使用[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];来尝试修复水平对齐问题。

+0

居然是它被设置为中心。如果我将其设置为正确的理由,它仍然是裁剪。 – 2012-04-17 23:02:37

9

虽然杰斯华的解决方案工作正常,但它不是我眼中的最佳选择。 我宁愿推荐子类UIButton并覆盖它的layoutSubviews方法。以上答案

-(void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    CGRect frame = self.titleLabel.frame; 
    frame.size.height = self.bounds.size.height; 
    frame.origin.y = self.titleEdgeInsets.top; 
    self.titleLabel.frame = frame; 
} 
+0

这很容易做到,只需创建一个类(UIButton的子类),复制粘贴,分配给按钮的自定义类。谢谢! – 2014-11-19 19:24:15

+0

这应该是被接受的答案。简单而优雅。 – 2015-05-05 08:06:40

+0

完美谢谢 – 2015-06-24 09:34:47

0

斯威夫特代码:

override func layoutSubviews() { 
    super.layoutSubviews() 
    titleLabel?.frame = CGRect(x: bounds.origin.x, y: titleEdgeInsets.top, width: frame.width, height: bounds.size.height) 
}