【问题标题】:Resize font size of UILabel based on Frame in Xamarin.iOS在 Xamarin.iOS 中基于 Frame 调整 UILabel 的字体大小
【发布时间】:2017-09-26 13:51:03
【问题描述】:

我想动态调整 UILabel 的文本大小。 UILabel 的框架将动态更改。每当更改 UILabel 的框架时,字体大小应与框架相匹配。

我试过下面的代码,但没有效果。

label.AdjustsFontSizeToFitWidth = true

我终于找到了解决办法。

这是我的计算

    void ResizeLabelFontSize(CGRect frame,UILabel label)
    {
        int fontSize = 3;
        UIFont font = UIFont.SystemFontOfSize(fontSize);
        CGSize size = label.Text.StringSize(font);
        while (frame.Width > size.Width)
        {
            fontSize++;
            font = UIFont.SystemFontOfSize(fontSize);
            size = label.Text.StringSize(font);
        }
        label.Font = UIFont.SystemFontOfSize(fontSize);
    }

【问题讨论】:

  • 您应该使用自动布局并设置垂直内容拥抱优先级值。将该优先级值设置为高于高度约束,如果您没有约束并且不想使用自动布局,则将内容拥抱优先级值设置为 1000,并在该行代码之后在您的视图上调用 set needs update 函数。

标签: ios xamarin.ios uilabel


【解决方案1】:

你可以看到AdjustsFontSizeToFitWidth定义here

正如文档所说,roder 中的大小将减小以适应标签的边界矩形,因此字体不会随着标签的框架而动态变大,但您可以在开始达到你的要求,看看我的测试结果。

代码sn-p:

UILabel label;
public override void ViewDidLoad()
{
    base.ViewDidLoad();

    label = new UILabel(frame: new CGRect(0, 100, 100, 100));
    label.BackgroundColor = UIColor.Red;
    label.TextColor = UIColor.White;
    label.Font = UIFont.SystemFontOfSize(1000);
    label.AdjustsFontSizeToFitWidth = true;
    label.LineBreakMode = UILineBreakMode.Clip;
    label.BaselineAdjustment = UIBaselineAdjustment.AlignCenters;
    label.Text = "label";
    View.AddSubview(label);
}

partial void ButtonIncrease(UIButton sender)
{
    CGRect rect = label.Frame;
    rect.Width = 300;
    rect.Height = 300;
    label.Frame = rect;
}

partial void ButtonDecrease(UIButton sender)
{
    CGRect rect = label.Frame;
    rect.Width = 100;
    rect.Height = 100;
    label.Frame = rect;
}

【讨论】:

  • 感谢您的回答。你能在这里更新你的代码 sn-p 吗?
  • label.AdjustsFontSizeToFitWidth = true ; label.LineBreakMode = UILineBreakMode.Clip;label.Font = UIFont.SystemFontOfSize(100);
  • 您正在手动更改字体大小。但我想要的是,我需要根据框架大小计算字体大小
  • 在我的方案中你不需要计算字体大小,它会随着标签框每次动态变化,你只需要首先设置label.AdjustsFontSizeToFitWidth = true ; label.LineBreakMode = UILineBreakMode.Clip;label.Font = UIFont.SystemFontOfSize(100);。在我的演示中,我只是创建了一个按钮单击来显示此场景。
  • 谢谢!。我会尽力让你知道
猜你喜欢
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 2011-04-09
相关资源
最近更新 更多