天道酬勤,学无止境

iOS:根据大小找到适合 UILabel 的正确字体大小(iOS: finding correct font size to fit in a UILabel depending on its size)

问题

我有一个UILabel其属性text我想将文本段落设置为使用NSString

我有一个数组,其中存储了代表文本段落的字符序列。

该段落不必完全适合/包含在此UILabel 。 如果段落没有结束,我将转到下一个标签。

假设我有这个UILabel 160 X 240 的矩形大小,我怎么能确定正确的字体大小以便很好地填充UILabel这个字符串?

是否有根据屏幕上矩形大小计算字体大小的数学方法?

例如:

UILabel *aLabel = [[UIlabel alloc] initwithFrame(CGRect){{0, 0}, 160, 240}];
aLabel.font = [UIFont fontWithName:@"Courier New" size:<???>]; //(font unit in points)

NSMutableString *aString = [[NSMutableString alloc] init];

//The following tries to fit the character one by one within the label rect based on   
//the width and height of the UILabel by appending String
int index = 0;
for(int x = 0; x < 240; x+=<???>) //height of label (pixel unit)
{
    for(int y = 0; y < 160; y+=<???>) //width of label (pixel unit)
    {
        [aString appendWithString:[paragraphArray objectAtIndex:index]];
        index++;
    }
    [aString appendWithString:@\n"];  //line break
}
aLabel.text = aString;

我怎样才能确定 ??? 是(即for循环的字体大小和像素大小)?

如果这不是执行此类任务的最佳方式,请向我建议其他任何方式。

回答1
+(void)resizeFontForLabel:(UILabel*)aLabel{

    // use font from provided label so we don't lose color, style, etc
    UIFont *font = aLabel.font;

    float lblWidth = aLabel.frame.size.width;
    float lblHeight = aLabel.frame.size.height;

    CGFloat fontSize = [font pointSize];
    UIFont *newFont = font;
    TRC_DBG(@"%@", aLabel.text);
    CGFloat height = [aLabel.text sizeWithFont:font constrainedToSize:CGSizeMake(lblWidth,MAXFLOAT) lineBreakMode:aLabel.lineBreakMode].height;

    TRC_DBG(@"Label Height %f Constraint height %f", lblHeight, height);
    //Reduce font size while too large, break if no height (empty string)
    while (height > lblHeight && height != 0) {
        fontSize--;
        newFont = [UIFont fontWithName:font.fontName size:fontSize];
        height = [aLabel.text sizeWithFont:newFont constrainedToSize:CGSizeMake(lblWidth,MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping].height;
        TRC_DBG(@"Constrained Height %f", height);
    };


    TRC_DBG(@"Font size before adjustment %f", aLabel.font.pointSize);
    // Set the UILabel's font to the newly adjusted font.
    aLabel.font = newFont;
    TRC_DBG(@"Adjust to font size of %f", newFont.pointSize);
    [aLabel setNeedsLayout];
}
回答2

在情节提要中单击调整以适合并选择最小尺寸。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 计算字体大小以适合框架-核心文本-NSAttributedString-iOS(Calculate Font Size to Fit Frame - Core Text - NSAttributedString - iOS)
    问题 我有一些文本通过NSAttributedString(下面的代码)绘制到固定的框架中。 目前,我很难将文本大小编码为16。我的问题是,是否有一种方法可以计算给定框架的文本的最佳适合大小? - (void)drawText:(CGContextRef)contextP startX:(float)x startY:(float) y withText:(NSString *)standString { CGContextTranslateCTM(contextP, 0, (bottom-top)*2); CGContextScaleCTM(contextP, 1.0, -1.0); CGRect frameText = CGRectMake(1, 0, (right-left)*2, (bottom-top)*2); NSMutableAttributedString * attrString = [[NSMutableAttributedString alloc] initWithString:standString]; [attrString addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Helvetica-Bold" size:16.0] range:NSMakeRange(0
  • 垂直对齐 UILabel 文本与约束和无换行(自动布局,单行)(Vertically Align UILabel text with constraints and no wrap (auto layout, single line))
    问题 因此,我在 IB 中设置了视图,以便此文本标签通过约束与缩略图顶部对齐。 但是,正如我们所知,您不能在 UILabel 中垂直对齐文本。 我的文本根据内容的长度更新字体大小。 全尺寸文本看起来很棒,而小文本在视图中明显较低。 现有的解决方案涉及调用 sizeToFit 或更新 uilabel 的框架以匹配文本的高度。 不幸的是,后者(虽然丑陋)解决方案在您不应该更新框架的约束下不能很好地发挥作用。 当您需要让文本自动收缩直到被截断时,前一种解决方案基本上不起作用。 (因此它不适用于有限数量的行和自动收缩)。 现在至于为什么 uilabel 的内在大小(高度)不会像宽度那样更新,当它通过“适合内容的大小”设置为自然大小时,我无法理解。 似乎绝对应该,但事实并非如此。 所以我正在寻找替代解决方案。 据我所知,您可能需要在标签上设置高度约束,并在计算文本高度后调整高度常量。 有人有好的解决方案吗? 回答1 这个问题是一个真正需要解决的 PITA。 在 iOS7 中不推荐使用的 API 或 iOS7 替换 API 已损坏都无济于事。 废话! 您的解决方案很好,但是它使用了不推荐使用的 API( sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode: ),并且封装得不是很好 -
  • 动态更改UILabel的字体大小(Dynamically changing font size of UILabel)
    问题 我目前有一个UILabel : factLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 280, 100)]; factLabel.text = @"some text some text some text some text"; factLabel.backgroundColor = [UIColor clearColor]; factLabel.lineBreakMode = UILineBreakModeWordWrap; factLabel.numberOfLines = 10; [self.view addSubview:factLabel]; 在我的iOS应用程序的整个生命周期中, factLabel获得了许多不同的值。 有些包含多个句子,有些则只有5或6个单词。 如何设置UILabel以便更改字体大小,以使文本始终适合我定义的边界? 回答1 单线: factLabel.numberOfLines = 1; factLabel.minimumFontSize = 8; factLabel.adjustsFontSizeToFitWidth = YES; 上面的代码会将文本的字体大小减小到(例如) 8以使文本适合标签内的大小。 numberOfLines = 1是强制性的。 多行:
  • iOS:自动版式中的多行UILabel(iOS: Multi-line UILabel in Auto Layout)
    问题 我在尝试通过自动版式实现一些非常基本的版式行为时遇到了麻烦。 我的视图控制器在IB中如下所示: 顶部标签是标题标签,我不知道它将是多少行。 我需要标题标签来显示所有文本行。 我还需要在标题的正下方布置其他两个标签和小图像,无论它高高多少。 我在标签和小图像之间设置了垂直间距约束,在标题标签和其超级视图之间设置了顶部间距约束,在小图像和其超级视图之间设置了底部间距约束。 白色的UIView没有高度限制,因此应垂直拉伸以包含其子视图。 我已将标题标签的行数设置为0。 如何获得标题标签以调整大小以适合字符串所需的行数? 我的理解是因为使用自动布局,所以不能使用setFrame方法。 而且我必须使用“自动布局”,因为我需要其他视图保持在标题标签下方(因此受约束)。 我怎样才能做到这一点? 回答1 在UILabel上使用-setPreferredMaxLayoutWidth ,自动布局应处理其余部分。 [label setPreferredMaxLayoutWidth:200.0]; 请参阅UILabel文档上的preferredMaxLayoutWidth。 更新: 只需将情节提要中的height约束设置为Greater than or equal to ,而无需设置setPreferredMaxLayoutWidth。 回答2 将标签集的行数扩展为0,并且更重要的是
  • 如何获得UILabel(UITextView)自动调整的字体大小?(How to get UILabel (UITextView) auto adjusted font size?)
    问题 自动调整后是否可以获得最终的字体大小? (属性adjustsFontSizeToFitWidth设置为YES,并且文本字体大小被缩小以适合标签) 我将UILabel中的drawTextInRect子类化以在文本上放置渐变,但是渐变大小必须与字体大小相同。 我无法获得适当大小的调整后的字体...甚至可以吗? //draw gradient CGContextSaveGState(myContext); CGGradientRef glossGradient; CGColorSpaceRef rgbColorspace; size_t num_locations = 2; CGFloat locations[2] = { 0.0, 1.0 }; CGFloat components[8] = { 1, 1, 1, 0.25, // BOTTOM color 1, 1, 1, 0.12 }; // UPPER color //scale and translate so that text would not be rotated 180 deg wrong CGContextTranslateCTM(myContext, 0, rect.size.height); CGContextScaleCTM(myContext, 1.0, -1.0); //create mask
  • 如何在自动版式iOS中动态更改字体大小?(How to dynamically change the font size in auto layout iOS?)
    问题 我想在UILabel放置文本,但是对于不同的iPhone, UILabel的大小正在更改,因为我使用的是自动布局,但是我无法固定字体大小,因此我的文本被删去了。 有什么办法可以设置约束,以使文本动态地适合UILabel ? 看到这里由于不同的屏幕分辨率,文本被剪切了 回答1 您应该使用autoshrink 。 由于所有iPhone在纵向模式下都具有相同的Compact width尺寸类别,因此您不能依靠它来处理标签尺寸。 预览适用于iPhone5,iPhone6和iPhone 6+ 在检查器中,必须在“自动收缩”前面选择最小字体比例或最小字体大小。 这使内容可以更改字体大小以适合标签。 在这里,我将最小字体比例设置为0.5,因此最小尺寸是当前尺寸(31.0)的一半。 文本将尝试适应,直到达到最小比例/大小。 (通常不要为此目的使用“拉紧字母间距”。拉紧字母间距使用相同的字体大小并减小字母之间的间距。这可以使标签在截断之前拉紧最多5%,但在最小字体比例/下无效)大小已启用。) 您可能需要在iPad Pro等宽屏设备上进行测试,而在iPhone 4S等较小的屏幕上进行测试。 作为一种好习惯,您应该使用不同的用户系统字体大小进行测试,可以在Settings >“ General >“ Accessibility >“ Larger Text中进行Settings 。
  • 如何调整标签的字体大小以适合矩形?(How to adjust font size of label to fit the rectangle?)
    问题 是的,这是一个很酷的myLabel.adjustsFontSizeToFitWidth = YES; 财产。 但是,只要标签有两行或更多行,它就不会将文本的大小调整为任何内容。 因此,如果它不适合rect,它只会被截断。 还有另一种方法吗? 回答1 如果要确保标签在宽度和高度上都适合矩形,可以在标签上尝试不同的字体大小,以查看是否适合。 该代码段起始于300 pt,并尝试通过减小字体大小使标签适合目标矩形。 - (void) sizeLabel: (UILabel *) label toRect: (CGRect) labelRect { // Set the frame of the label to the targeted rectangle label.frame = labelRect; // Try all font sizes from largest to smallest font size int fontSize = 300; int minFontSize = 5; // Fit label width wize CGSize constraintSize = CGSizeMake(label.frame.size.width, MAXFLOAT); do { // Set current font size label.font = [UIFont
  • iOS 7错误-未出现NSAttributedString(iOS 7 BUG - NSAttributedString does not appear)
    问题 上周,我问了一个有关NSAttributedString未显示的模拟器错误的问题:iOS 7模拟器错误-未出现NSAttributedString 不幸的是,现在看来这不是模拟器错误,而是iOS 7错误。 我现在在iPhone 5设备上重现了此问题。 该错误似乎是将NSUnderlineStyleAttributeName和NSParagraphStyleAttributeName用作NSAttributedString的属性的组合。 到目前为止,我仅在两台iOS 7设备上进行了测试,而该问题仅在其中一台设备上出现过。 即使它们都已升级到完全相同的版本,也是如此: 具有iOS 7.0(11A465)的第一部iPhone 5:未出现文本升级到7.0.2(11A501)后的第一个iPhone 5:不显示文本运行iOS 7.0(11A4449d)的第二部iPhone 5:正确显示文本升级到7.0.2(11A501)后的第二个iPhone 5:不显示文本 因此,苹果似乎在iOS 7.0(11A4449d)之后引入了此错误。 我已经向他们提出了一个错误,并且会在收到任何答复时通知您。 重现错误的步骤 如果您运行的是iOS 7.0.2,则应该能够重现此错误。 在您的设备上下载并运行此项目https://github.com/rohinnz/iOS-7-BUG--
  • Xcode 6 Size Classs中的自定义字体大小无法与自定义字体一起正常使用(Custom Font Sizing in Xcode 6 Size Classes not working properly with Custom Fonts)
    问题 Xcode 6具有一项新功能,其中UILabel , UITextField和UIButton中的字体和字体大小可以根据当前设备配置的大小类(在情节UIButton中)自动设置。 例如,您可以将UILabel设置为在“任何宽度,紧凑高度”配置(例如在横向iPhone上)上使用12号字体,在“常规宽度,常规高度”配置(例如iPad上)上使用18号字体。 更多信息请点击这里: developer.apple.com/size_class 从理论上讲,这是一个很棒的功能,因为它可能不需要基于设备配置在UI功能上以编程方式设置不同的字体。 现在,我有一些条件代码可以根据设备类型设置字体,但是很明显,这意味着我必须在整个应用中的所有位置以编程方式设置字体。 因此,我最初对该功能感到非常兴奋,但是我发现它对我的实际使用存在严重问题(可能是一个错误)。 请注意,我正在针对SDK 8进行构建并设置iOS 8的最低部署目标,因此这与与旧版本的iOS的兼容性无关。 问题是这样的:如果我为不同的大小级别设置了不同的字体大小,并使用iOS提供的“系统”字体,那么一切都会按预期工作,并且字体大小会根据大小级别而变化。 如果我使用应用程序提供的自定义字体(是的,我已经在我的应用程序捆绑包中正确设置了它,因为它可以以编程方式工作)并将该自定义字体设置为XCode 6故事板上的标签,该字体也可以按预期工作。
  • iOS8使用Interface Builder自动调整大小的静态TableView单元(iOS8 self-sizing static TableView cells with Interface Builder)
    问题 我对能够在Xcode内使用自动布局支持动态类型来构建我的静态TableView的前景感到兴奋,正如WWDC2014在表和集合视图中的新增功能中所述。 我宁愿使用严格的Xcode / Interface Builder和情节提要来处理自动版式。 当我这样做时,以某种方式TableView单元格不会调整大小,并且我确定我缺少一些简单的东西。 要重现此问题,请使用Xcode 7 beta 5,我: 创建了一个新的单视图项目。 将情节提要入口点设置为新的UITableViewController。 使它成为具有分组样式的静态表格视图。 在第一行添加了一个标签。 在顶部,底部,左侧和右侧添加了约束。 将标签字体设置为“正文”。 已添加到ViewDidLoad: self.tableView.rowHeight = UITableViewAutomaticDimension; self.tableView.estimatedRowHeight = 44.0; 对其进行调整,然后在“设置”中调整“动态类型”。 字体更改时,TableView的高度仍然停留在表面上的默认值44处,并截断了标签。 这是上述结果的GitHub存储库。 为什么自动布局不导致TableView扩展以填充必要的空间以适合新的较大标签文本? 我发现了有关该主题的出色文章,例如以下内容,并着重于在此处使用代码设置约束。
  • iOS:根据文字长度调整UIButton的大小(iOS: UIButton resize according to text length)
    问题 在界面构建器中,按住Command + =将调整按钮的大小以适合其文本。 我想知道在将按钮添加到视图之前是否可以通过编程方式做到这一点。 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button.titleLabel setFont:[UIFont fontWithName:@"Arial-BoldMT" size:12]]; [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside]; // I need to know the width needed to accomodate NSStringVariable [button setTitle:NSStringVariable forState:UIControlStateNormal]; // So that I can set the width property of the button before addSubview [button setFrame:CGRectMake(10, 0, width, fixedHeight)]; [subNavigation addSubview
  • 创建单一大小的动态UILabel字体(Create single size dynamic UILabel font)
    问题 我们都知道如何创建动态UILabel字体(单行)- lbl.adjustsFontSizeToFitWidth = true lbl.numberOfLines = 1 lbl.minimumScaleFactor = 0.1 lbl.baselineAdjustment = UIBaselineAdjustment.AlignCenters lbl.textAlignment = NSTextAlignment.Center 问题在于,对于每个给定的字符串,它给出不同的结果。 因此,例如,如果我有一个字符串"Hello"和"Hello World"则计算出的字体大小将有所不同。我需要为所有字符串创建具有单个大小的动态字体。 我的项目中的示例: iPhone 6内置相机效果的示例(如您所见,所有UILabels字体大小都匹配): 我在想做什么? 基本上我知道我将拥有的最大字符串。 所以我在想以某种方式(有效地)计算给定CGSIze中最大字符串的字体大小。 因此,它将始终处于边界内。 有什么建议么? 回答1 你是一句话: lbl.minimumScaleFactor = 0.1 该行的意思是,“嗨,iOS,如果您想缩小字体,请继续缩小字体。” 如果您不想要,那就不要这么说。 而是选择一种字体大小并坚持使用。 什么尺寸? 好吧,NSString可以告诉您以给定的字体
  • 自定义大小的UITableViewCell中有多个UILabel(Multiple UILabels inside a self sizing UITableViewCell)
    问题 在我正在创建的这个iOS 8应用程序中,我有一个表格视图,我需要它们能够自动调整大小。 我使用“自动布局”实现了它,并且可以正常工作。 几乎。 这是现在的样子。 单元内有3个标签。 具有lorem ipsum文本的主标签。 带有数字字符串的字幕(它们是两个单独的标签。由于它们具有相同的颜色,可能会造成混淆。)然后是带有黑色小文本的第三个标签。 第一个标签正确调整了自身大小,没有问题,第二个标签相应地上下移动。 但是问题出在第三个小标签上。 如您所见,它无法调整大小以适合所有文本。 现在发生了一件奇怪的事情。 我把它变成风景,就是这样。 由于有空间,标签将显示其应该显示的整个文本。 美好的。 然后,我将其恢复为人像。 现在,小标签已调整大小以适合其所有文本,但是它溢出了单元格的边界。 我尝试将单元变大,但是没有用。 由于这是自动调整大小的单元格,所以我什至不认为这是正确的方法。 我也没有收到关于我的自动布局约束的任何错误甚至警告。 我已经在viewDidLoad()方法中设置了这两行代码。 tableView.estimatedRowHeight = 100 tableView.rowHeight = UITableViewAutomaticDimension 谁能告诉我我在这里做错了什么吗? 由于仅通过查看图像很难回答,并且在上述代码段旁边没有其他代码可以发布了
  • UILabel sizeToFit不适用于自动布局iOS6(UILabel sizeToFit doesn't work with autolayout ios6)
    问题 我应该如何以编程方式(和使用哪种方法)配置高度取决于其文本的UILabel? 我一直在尝试使用Storyboard和代码的组合进行设置,但无济于事。 设置lineBreakMode和numberOfLines时,每个人都建议使用sizeToFit 。 但是,无论我是否将该代码放入viewDidLoad: , viewDidAppear:或viewDidLayoutSubviews我都无法正常工作。 我要么将框设置得太小而不能容纳较长的文本,否则它不会增长,或者我将其设置得太大而不会收缩。 回答1 请注意,在大多数情况下,Matt的解决方案可以按预期工作。 但是,如果对您不起作用,请进一步阅读。 要使标签自动调整高度,您需要执行以下操作: 设置标签的布局约束设置高度限制为低优先级。 它应该低于ContentCompressionResistancePriority 设置numberOfLines = 0 将ContentHuggingPriority设置为高于标签的高度优先级设置label的preferredMaxLayoutWidth。 标签使用该值来计算其高度 例如: self.descriptionLabel = [[UILabel alloc] init]; self.descriptionLabel.numberOfLines = 0; self
  • iOS:以编程方式设置 UILabel 的字体大小(iOS: set font size of UILabel Programmatically)
    问题 我正在尝试设置 UILabel 的字体大小。 无论我输入什么值,文本大小似乎都没有改变。 这是我正在使用的代码。 [self setTitleLabel:[[UILabel alloc] initWithFrame:CGRectMake(320.0,0.0,428.0,50.0)]]; [[self contentView] addSubview:[self titleLabel]]; UIColor *titlebg = [UIColor clearColor]; [[self titleLabel] setBackgroundColor:titlebg]; [[self titleLabel] setTextColor:[UIColor blackColor]]; [[self titleLabel] setFont:[UIFont fontWithName:@"System" size:36]]; 回答1 尝试[UIFont systemFontOfSize:36]或[UIFont fontWithName:@"HelveticaNeue" size:36]即[[self titleLabel] setFont:[UIFont systemFontOfSize:36]]; 回答2 目标-C: [label setFont: [label.font
  • 如何使 NSStringDrawingContext 缩小文本?(How to make NSStringDrawingContext shrink text?)
    问题 我正在尝试使用 iOS 6 的属性字符串 API 来计算文本的大小并在必要时缩小字体大小。 但是,我无法像文档所说的那样工作。 NSString *string = @"This is a long text that doesn't shrink as it should"; NSStringDrawingContext *context = [NSStringDrawingContext new]; context.minimumScaleFactor = 0.5; UIFont *font = [UIFont fontWithName:@"SourceSansPro-Bold" size:32.f]; NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; paragraphStyle.lineBreakMode = NSLineBreakByClipping; NSDictionary *attributes = @{ NSFontAttributeName: font, NSParagraphStyleAttributeName: paragraphStyle }; NSAttributedString *attributedString = [
  • 最小字体大小在 ios 版本 6.0 上已弃用(Minimum Font Size deprecated on ios version 6.0)
    问题 我刚刚使用 iOS 6.0 升级到 xcode 4.5,它在我的 XIB 文件中的所有 UILabel 上突出显示了一条警告,说“ios 6.0 版已弃用最小字体大小”。 有谁知道这是指什么以及如何解决它? 更新:图像不再可用(位于 https://skitch.com/hahmadi82/eyk51/cloud) 回答1 从 iOS 6.0 开始不推荐使用UILabel minimumFontSize属性。 minimumFontSize的替代方案是minimumScaleFactor 。 如果您将minimumFontSize/defaultFontSize分配给minimumScaleFactor ,它的工作方式与 minimumFontSize 相同。 代码如下 - 例如字体大小为 30.0,如果您希望最小字体大小为 12.0 YOURLABEL.font= [UIFont fontWithName:@"FONT_NAME" size:30.0]; [YOURLABEL setMinimumScaleFactor:12.0/[UIFont labelFontSize]]; 回答2 使用 minimumScaleFactor 代替...链接 回答3 快速修复...此处最小字体大小为 8.0 CGFloat size = textLabel.font.pointSize
  • 如何计算iOS 7中的实际字体点大小(而不是边界矩形)?(How to calculate actual font point size in iOS 7 (not the bounding rectangle)?)
    问题 编辑:链接的“重复”问题仅涉及计算文本矩形。 标签缩放后,我需要计算实际字体大小,而不是字符串大小。 现在不推荐使用此方法: size = [self sizeWithFont:font // 20 minFontSize:minFontSize // 14 actualFontSize:&actualFontSize // 16 forWidth:maxWidth lineBreakMode:self.lineBreakMode]; 缩小文本大小以适合时,如何在iOS 7中现在计算UILabel的字体大小? 回答1 我有同样的问题,我需要知道实际大小,以使我的UIView中的其他UILabel匹配。 我知道这不是一个完美的解决方案,但也许对您有用。 我的解决方案是:我可以“手动”计算尺寸,而不是使用adjustsFontSizeToFitWidth 。 CGSize initialSize = [_label.text sizeWithAttributes:@{NSFontAttributeName:_label.font}]; while ( initialSize.width > _label.frame.size.width ) { [_label setFont:[_label.font fontWithSize:_label.font.pointSize - 1]
  • 为整个iOS应用程序使用自定义字体(Using custom font for entire iOS app swift)
    问题 我知道要在屏幕上设置元素的自定义字体,我可以简单地执行someLabel.font=UIFont(name: "Exo 2.0", size: 15) 。 我想知道如何使用swift为整个应用程序设置它。 (黑客将针对应用程序的每个元素执行我所知道的事情,但这只会成为可维护性的噩梦) 我看到这个问题已经用Objective-C标签问过了,如何在不指定大小的情况下为整个iOS应用设置自定义字体,但我对Objective-C不够熟悉,不足以将代码移植到Swift 回答1 您可以设置UILabel和其他UIView的外观: UILabel.appearance().font = UIFont(name: "yourFont", size: yourSize) 更一般: AnyUIView.appearance().font = UIFont(name: "yourFont", size: yourSize) 回答2 作为更详细的答案,并具有以下优点,我建议使用扩展程序: 没有大小覆盖(将使用您在设计器中设置的任何大小) 没有样式覆盖(我的代码中实现了粗体,浅色,中等,UltraLight,但您可以根据需要自定义) import UIKit extension UILabel { @objc var substituteFontName : String { get { return
  • -adjustsFontSizeToFitWidth设置为YES时,如何计算UILabel的字体大小?(How to figure out the font size of a UILabel when -adjustsFontSizeToFitWidth is set to YES?)
    问题 如果myLabel.adjustsFontSizeToFitWidth = YES ,则UILabel将自动调整字体大小,以防文本对于标签来说太长。 例如,如果我的标签宽度仅为100px,并且我的文本太长而无法容纳当前的字体大小,它将缩小字体大小,直到文本适合标签大小为止。 当字体大小缩小时,我需要从UILabel获取实际显示的字体大小。 例如,假设我的字体大小实际上为20,但是UILabel必须将其缩小为10。当我向UILabel询问字体和字体大小时,我得到的是旧字体大小(20),但没有显示的字体大小(10)。 回答1 我不确定这是否完全正确,但是希望它应该非常接近。 它可能不会考虑截断的字符串或标签的高度,但是您可以手动执行此操作。 方法 -(CGSize)sizeWithFont:(UIFont *)font minFontSize:(CGFloat)minFontSizeactualFontSize:(CGFloat *)actualFontSize forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode 将返回文本大小,并注意它还具有用于实际字体大小的参考参数。 回答2 万一仍然有人需要答案。 在iOS9中,您可以使用boundingRectWithSize:options