将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以适应之前,字体是“大”。