【发布时间】:2012-04-29 07:29:31
【问题描述】:
我正在为 UIButton 的标题使用自定义字体。它可以工作,除非使用这种特殊字体,第一个字符的一部分被剪裁了。例如:
我尝试设置 contentEdgeInsets 和 titleEdgeInsets ,但似乎无法让它不被剪裁。我还尝试将 button.titleLabel.clipsToBounds 属性设置为 NO;
任何建议将不胜感激。
【问题讨论】:
标签: iphone ios uibutton uilabel
我正在为 UIButton 的标题使用自定义字体。它可以工作,除非使用这种特殊字体,第一个字符的一部分被剪裁了。例如:
我尝试设置 contentEdgeInsets 和 titleEdgeInsets ,但似乎无法让它不被剪裁。我还尝试将 button.titleLabel.clipsToBounds 属性设置为 NO;
任何建议将不胜感激。
【问题讨论】:
标签: iphone ios uibutton uilabel
在我看来,您的内容很时髦。如果标签的边框不能直接访问,请使用[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter]; 尝试修复水平对齐问题。
【讨论】:
所以我最终将 UIButton 标题设置为 nil,并将我自己的 UILabel 作为子视图添加到 UIButton。我将 UILabel 框架设置为与按钮相同的大小,并将其设置为居中。
我确信这不是最优雅的解决方案,但它可以完成工作。
【讨论】:
虽然 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;
}
【讨论】:
上述答案的 Swift 代码:
override func layoutSubviews() {
super.layoutSubviews()
titleLabel?.frame = CGRect(x: bounds.origin.x, y: titleEdgeInsets.top, width: frame.width, height: bounds.size.height)
}
【讨论】: