【问题标题】:Adjust font size of text to fit in UIButton调整文本的字体大小以适应 UIButton
【发布时间】:2015-12-10 06:08:46
【问题描述】:

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

当然我可以访问 UIButton 的 titleLabel。 在标签中,我会将autoshrink 设置为似乎对应于

的最小字体比例
self.myButton.titleLabel.adjustsFontSizeToFitWidth = YES;

,但实际上并不相同,因为它只会使文本水平适应边界,而不是垂直适应,因此不会改变字体大小。

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

我已经试过了

self.myButton.titleLabel.numberOfLines = 0;
self.myButton.titleLabel.minimumScaleFactor = 0.5f;

没有成功,总是以上图左侧的adjustsFontSizeToFitWidth 结束。

编辑解决方案还必须兼容 ios7

【问题讨论】:

  • 您是否设置了 self.myButton.titleLabel.minimumFontSize 属性?
  • 我使用了 minimumScaleFactor 而不是 minimumFontSize,但我猜在功能方面应该不会有所不同
  • 哦,我刚刚看到 minimumFontSize 已弃用@Venkat

标签: ios objective-c swift uibutton uilabel


【解决方案1】:

在情节提要中,转到属性检查器中的链接中断,查看自动换行..或根据您的选择进行设置。

【讨论】:

    【解决方案2】:

    使文本水平和垂直适合按钮边界:

    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。用于在按钮中启用多行。只是使用上面的代码

    最终结果:

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

        【解决方案4】:

        您还可以在界面生成器中为按钮设置用户定义的运行时属性

        titleLabel.adjustsFontSizeToFitWidth = true
        

        【讨论】:

        • 确实这是正确的答案。确保没有自动换行(然后它不起作用)但有截断尾随等。您还可以为 titleLabel.minimumScaleFactor 设置一个数字;但 titleLabel.adjustsFontSizeToFitWidth 必须在那里。在选择按钮时,在 Interface Builder 的 Identity Inspector 中点击用户定义属性上的 + 号。谢谢@StackUnderflow。
        【解决方案5】:

        Swift 3.0 的更新代码:

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

        【讨论】:

        • 很棒的解决方案:)
        【解决方案6】:

        如果您喜欢在情节提要中执行,只需单击按钮,然后显示属性检查器,并将换行符设置为“自动换行”。

        【讨论】:

          【解决方案7】:
          self.mybutton.titleLabel.minimumScaleFactor = 0.5f;
          self.mybutton.titleLabel.numberOfLines = 0;   <-- Or to desired number of lines
          self.mybutton.titleLabel.adjustsFontSizeToFitWidth = YES;
          

          ... 在 vi​​ewDidLoad 中 layoutIfNeeded 之后成功了 事实证明,所有这些都必须设置为实际调整字体大小,而不仅仅是使其适合框架。

          Swift 3 更新:

          mybutton.titleLabel?.minimumScaleFactor = 0.5
          mybutton.titleLabel?.numberOfLines = 0   <-- Or to desired number of lines
          mybutton.titleLabel?.adjustsFontSizeToFitWidth = true
          

          【讨论】:

          • 我必须设置 self.myButton.titleLabel.numberOfLines = 1;否则可以有两行。
          • @MarkHim 我遇到的情况是文本水平适合按钮,但不适合垂直。在那种情况下它不起作用;-(有什么想法吗?
          • 听起来你有严格的高度限制@mica 我假设内在内容大小应该用我的方法正确计算,所以只需删除高度限制,它应该可以正常工作
          • 我必须添加 self.mybutton.titleLabel.lineBreakMode = NSLineBreakByClipping 才能使这个答案起作用
          【解决方案8】:

          在 Xcode->Open storyboard->转到属性检查器->Control->Alignment->在水平和垂直中选择第二个。

          YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
          

          【讨论】:

            【解决方案9】:

            尝试调用以下方法。

            button.titleLabel?.baselineAdjustment = UIBaselineAdjustment.AlignCenters
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-11-25
              • 1970-01-01
              • 2011-05-23
              • 1970-01-01
              • 2011-02-06
              相关资源
              最近更新 更多