Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 调整文本的字体大小以适合UIButton_Ios_Objective C_Swift_Uibutton_Uilabel - Fatal编程技术网

Ios 调整文本的字体大小以适合UIButton

Ios 调整文本的字体大小以适合UIButton,ios,objective-c,swift,uibutton,uilabel,Ios,Objective C,Swift,Uibutton,Uilabel,我想确保按钮文本适合UIButton,而UIButton具有固定的大小 当然,我可以访问UIButton的标题标签。 在标签中,我会将自动收缩设置为最小字体比例,这似乎与 self.myButton.titleLabel.adjustsFontSizeToFitWidth = YES; ,但实际上表现不一样,因为它只使文本水平地适合边界,而不是垂直地适合边界,因此不会更改字体大小 如何以编程方式调整标签的字体大小,使文本符合标签边界(如下图中的目标所示) 我已经试过了 self.myButt

我想确保按钮文本适合UIButton,而UIButton具有固定的大小

当然,我可以访问UIButton的标题标签。 在标签中,我会将
自动收缩
设置为最小字体比例,这似乎与

self.myButton.titleLabel.adjustsFontSizeToFitWidth = YES;
,但实际上表现不一样,因为它只使文本水平地适合边界,而不是垂直地适合边界,因此不会更改字体大小

如何以编程方式调整标签的字体大小,使文本符合标签边界(如下图中的目标所示)

我已经试过了

self.myButton.titleLabel.numberOfLines = 0;
self.myButton.titleLabel.minimumScaleFactor = 0.5f;
如果没有成功,结果总是如上图左侧的
adjustsFontSizeToFitWidth
所示


编辑:解决方案还必须符合ios7标准

尝试调用以下方法

button.titleLabel?.baselineAdjustment = UIBaselineAdjustment.AlignCenters
self.mybutton.titleLabel.minimumScaleFactor=0.5f;

self.mybutton.titleLabel.numberOfLines=0 在Xcode->打开故事板->转到属性检查器->控制->对齐->选择水平和垂直方向的第二个

试试这个:

  [myButton setFont:[[myButton font] fontWithSize:--originalButtonFontSize]];
  textWidth = [text sizeWithFont:[myButton font]].width;

}

还可以在Interface Builder中为按钮设置用户定义的运行时属性,其中

titleLabel.adjustsFontSizeToFitWidth = true

Swift 3.0的更新代码:

yourButton.titleLabel?.minimumScaleFactor = 0.5
yourButton.titleLabel?.numberOfLines = 0
yourButton.titleLabel?.adjustsFontSizeToFitWidth = true

如果您喜欢在故事板中执行,只需单击按钮,然后显示属性检查器,并将换行设置为“Word Wrap”


要使文本在水平和垂直方向上与按钮边框相匹配,请执行以下操作:

1-设置按钮对齐方式,如图(*非常重要*)

2-在ViewController中添加这行代码

btnTest.setTitle("Test for multi line in button show line in button show Test for multi line in button show line in button show", for: .normal)
btnTest.titleLabel!.textAlignment = .center
btnTest.titleLabel!.numberOfLines = 0
btnTest.titleLabel!.adjustsFontSizeToFitWidth = true
btnTest.titleLabel!.minimumScaleFactor = 0.5
// below line to add some inset for text to look better
// you can delete or change that
btnTest.contentEdgeInsets = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5)
  • 请注意,不要使用
    btnTest.titleLabel!。lineBreakMode=NSLineBreakMode.byWordWrapping
    或代码中的其他BreakMode。用于启用多行输入按钮。只是使用上面的代码
最终结果:


在情节提要中,转到链接打断属性检查器,参见word wrap..或根据您的选择进行设置


您是否设置了self.myButton.titleLabel.minimumFontSize属性?我使用了minimumScaleFactor而不是minimumFontSize,但在功能方面不会有什么不同。我猜哦,我刚刚看到minimumFontSize被弃用@Venkat可能与我必须设置self.myButton.titleLabel.numberOfLines=1的属性重复;否则可能会有两行。@MarkHim我的情况是,文本在按钮中水平对齐,而不是垂直对齐。在这种情况下,它不起作用-(有什么想法吗?听起来你有严格的高度限制@mica我想应该用我的方法正确计算内部内容大小,所以只要删除高度限制,它就会很好地工作。我必须添加
self.mybutton.titleLabel.lineBreakMode=NSLineBreakByClipping
,对于这个答案,这是正确的ans。)wer.确保没有文字包装(那么它就不起作用了)但是要有截断尾随之类的。您也可以有titleLabel.minimumScaleFactor的数字;但是titleLabel.adjustsFontSizeToFitWidth必须在那里。选中按钮时,在Interface Builder的Identity Inspector中的用户定义属性上点击+号。谢谢@StackUnderflow.Awesome solution:)
titleLabel.adjustsFontSizeToFitWidth = true
yourButton.titleLabel?.minimumScaleFactor = 0.5
yourButton.titleLabel?.numberOfLines = 0
yourButton.titleLabel?.adjustsFontSizeToFitWidth = true
btnTest.setTitle("Test for multi line in button show line in button show Test for multi line in button show line in button show", for: .normal)
btnTest.titleLabel!.textAlignment = .center
btnTest.titleLabel!.numberOfLines = 0
btnTest.titleLabel!.adjustsFontSizeToFitWidth = true
btnTest.titleLabel!.minimumScaleFactor = 0.5
// below line to add some inset for text to look better
// you can delete or change that
btnTest.contentEdgeInsets = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5)