将UIButton字体大小调整为宽度
我有以下代码:
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];
问题是,当文本中的string不长时,它显示罚款(1-2位),但是当它很长(3 ++数字),我只能看到一个红色的button,里面没有文字。 我如何调整?
我不认为:
[button.titleLabel setAdjustsFontSizeToFitWidth:YES];
工作是否正确?
尝试这个:
button.titleLabel.numberOfLines = 1; button.titleLabel.adjustsFontSizeToFitWidth = YES; button.titleLabel.lineBreakMode = NSLineBreakByClipping; //<-- MAGIC LINE
我不知道为什么这样做的伎俩,但它:)
button.titleLabel.adjustsFontSizeToFitWidth = YES;
如果您使用自动布局并对button的宽度设置了约束,应该自行完成这项工作。
其他选项(最小比例因子,线数等)仍然可以根据您的需要进一步定制,但不是必需的。
EliBud的答案在iOS 8上不起作用。我发现了一个适用于iOS 8的解决scheme。下面是一个快速代码:
let label = self.button?.titleLabel label?.minimumScaleFactor = 0.01 label?.adjustsFontSizeToFitWidth = true label?.font = UIFont.systemFontOfSize(100)
你可以玩标签?.lineBreakMode,因为我发现结果会因不同的rest模式而有所不同。
adjustsFontSizeToFitWidth
不工作,直到我在Interface Builder中的button设置宽度约束。
设置约束保持button的大小不增加,因此不知道它不得不缩小文本。
基于其他解决scheme的iOS 10.3解决scheme在这里:
button.titleLabel!.numberOfLines = 1 button.titleLabel!.adjustsFontSizeToFitWidth = true button.titleLabel!.baselineAdjustment = .alignCenters
目前还没有人提到baselineAdjustment
。 我需要它,因为adjustsFontSizeToFitWidth
生效后,button标签变得垂直不alignment。 苹果的baselineAdjustment
文件:
如果
adjustsFontSizeToFitWidth
属性设置为true
,那么在需要调整字体大小的情况下,此属性将控制文本基线的行为。 这个属性的默认值是alignBaselines
。 此属性仅在numberOfLines
属性设置为1
时有效。
FWIW,我永远不能完全alignment的标签。
在最新的迅速这似乎为我工作
button.titleLabel!.numberOfLines = 1 button.titleLabel!.adjustsFontSizeToFitWidth = true button.titleLabel!.lineBreakMode = NSLineBreakMode.ByClipping
Xamarin.iOS解决scheme
var accountButton = new UIButton(); accountButton.SetTitle("Account", UIControlState.Normal); accountButton.TitleLabel.AdjustsFontSizeToFitWidth = true; accountButton.TitleLabel.Lines = 1; accountButton.TitleLabel.LineBreakMode = UILineBreakMode.Clip; accountButton.TitleLabel.Font = accountButton.TitleLabel.Font.WithSize(35);
我最终设置字体大小,以确保在系统resize以适应之前,字体是“大”。