【问题标题】:Cropped UIButton Title裁剪的 UIButton 标题
【发布时间】:2012-04-29 07:29:31
【问题描述】:

我正在为 UIButton 的标题使用自定义字体。它可以工作,除非使用这种特殊字体,第一个字符的一部分被剪裁了。例如:

我尝试设置 contentEdgeInsets 和 titleEdgeInsets ,但似乎无法让它不被剪裁。我还尝试将 button.titleLabel.clipsToBounds 属性设置为 NO;

任何建议将不胜感激。

【问题讨论】:

标签: iphone ios uibutton uilabel


【解决方案1】:

在我看来,您的内容很时髦。如果标签的边框不能直接访问,请使用[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter]; 尝试修复水平对齐问题。

【讨论】:

  • 实际上它是按原样设置为中心的。如果我将它设置为右对齐,它仍然被裁剪。
【解决方案2】:

所以我最终将 UIButton 标题设置为 nil,并将我自己的 UILabel 作为子视图添加到 UIButton。我将 UILabel 框架设置为与按钮相同的大小,并将其设置为居中。

我确信这不是最优雅的解决方案,但它可以完成工作。

【讨论】:

  • 这真的很糟糕,这是唯一的解决方案。发生这种情况的原因是字体设计师有意将其字母的边界编码为小于实际值,以便它们嵌套。这对于斜体和草书字体尤其重要。我希望 Apple 在计算 UIButton 标签的宽度时不会如此“精确”,或者至少允许我们自己更改它。我正在提交错误报告,你也应该这样做。
【解决方案3】:

虽然 Jeshua 的解决方案运行良好,但在我看来它并不是最佳解决方案。 我宁愿推荐子类 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;
}

【讨论】:

  • 这真的很容易做到,只需创建一个类(子类化UIButton),复制粘贴,分配给按钮的自定义类。谢谢!
  • 这应该是公认的答案。简洁大方。
  • 为上述解决方案添加了 swift 3.0 答案
  • 出于某种原因,这似乎也修复了标签 底部 处的剪切(即,在字形中看到的 descenders,例如“y " 或 "g") 时使用自定义字体(在我的例子中,Hiragino)。
【解决方案4】:

上述答案的 Swift 代码:

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

【讨论】:

    猜你喜欢
    • 2014-09-07
    • 2011-06-02
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多