adi*_*dit 116 objective-c ios
我有以下代码:
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0.0, 0.0, 25, 25);
[[button layer] setCornerRadius:5.0f];
[[button layer] setMasksToBounds:YES];
[[button layer] setBackgroundColor:[[UIColor redColor] CGColor]];
[button.titleLabel setFrame:CGRectMake(0,0, 25, 25)];
[button setTitle:[NSString stringWithFormat:@"%@", [[topics objectAtIndex:indexPath.row] unread]] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
问题是,当文本中的字符串不长时,它显示正常(1-2位数).但是,当它很长(3 ++数字)时,我只能看到一个红色按钮,里面没有文字.我该如何调整?
我不这么认为:
[button.titleLabel setAdjustsFontSizeToFitWidth:YES];
Run Code Online (Sandbox Code Playgroud)
这份工作,对吗?
eli*_*bud 282
试试这个:
button.titleLabel.numberOfLines = 1;
button.titleLabel.adjustsFontSizeToFitWidth = YES;
button.titleLabel.lineBreakMode = NSLineBreakByClipping; //<-- MAGIC LINE
Run Code Online (Sandbox Code Playgroud)
我不确定为什么这样做但它确实:)
joa*_*kim 29
button.titleLabel.adjustsFontSizeToFitWidth = YES;
Run Code Online (Sandbox Code Playgroud)
如果您使用自动布局并且已对按钮的宽度设置了约束,则应自行完成工作.
其他选项(最小比例因子,行数等)仍可用于根据您的需要进一步定制,但不是必需的.
Ale*_*kiy 13
EliBud的答案在iOS 8上不起作用.我找到了一个适用于iOS 8的解决方案.下面是一个快速的代码:
let label = self.button?.titleLabel
label?.minimumScaleFactor = 0.01
label?.adjustsFontSizeToFitWidth = true
label?.font = UIFont.systemFontOfSize(100)
Run Code Online (Sandbox Code Playgroud)
您可以使用标签?.lineBreakMode,因为我发现不同的休息模式的结果会有所不同.
tol*_*ard 10
在最新的快速,这似乎对我有用
button.titleLabel!.numberOfLines = 1
button.titleLabel!.adjustsFontSizeToFitWidth = true
button.titleLabel!.lineBreakMode = NSLineBreakMode.ByClipping
Run Code Online (Sandbox Code Playgroud)
adjustsFontSizeToFitWidth
在我在Interface Builder中的按钮上设置宽度约束之前,我没有为我工作.
设置约束使按钮的大小不变,因此没有意识到它必须缩小文本.
基于其他答案的iOS 10.3解决方案:
button.titleLabel!.numberOfLines = 1
button.titleLabel!.adjustsFontSizeToFitWidth = true
button.titleLabel!.baselineAdjustment = .alignCenters
Run Code Online (Sandbox Code Playgroud)
还没人提到baselineAdjustment
; 我需要它,因为按钮标签在adjustsFontSizeToFitWidth
生效后变得垂直未对齐.Apple的baselineAdjustment
文档:
如果
adjustsFontSizeToFitWidth
属性设置为true
,则此属性控制在需要调整字体大小的情况下文本基线的行为.此属性的默认值为alignBaselines
.仅当numberOfLines
属性设置为时,此属性才有效1
.
FWIW,我永远无法将标签完全对齐.
extension UIButton {
@IBInspectable var adjustFontSizeToWidth: Bool {
get {
return self.titleLabel?.adjustsFontSizeToFitWidth
}
set {
self.titleLabel?.numberOfLines = 1
self.titleLabel?.adjustsFontSizeToFitWidth = newValue;
self.titleLabel?.lineBreakMode = .byClipping;
self.titleLabel?.baselineAdjustment = .alignCenters
}
}
}
Run Code Online (Sandbox Code Playgroud)