Xcode 如何根据系统字体大小更改标签的字体大小?

How do I make a label's font size change based on the system font size in Xcode?

我在 table 视图中的原型单元格上有一个标签。我有一些随机文本,我希望根据系统字体的大小看到这些文本的变化。现在,如果我更改系统字体大小,此标签将保持相同大小。

这主要是为了 iOS 8。如果这与 iOS 7 一起使用,那就更好了。

如果我明白你的意思,你可以使用这样的东西。

if UIScreen.mainScreen().bounds.size.height == 480 {
    // iPhone 4

label.font = label.font.fontWithSize(20)     
} else if UIScreen.mainScreen().bounds.size.height == 568 {
    // IPhone 5

label.font = label.font.fontWithSize(20)
} else if UIScreen.mainScreen().bounds.size.width == 375 {
    // iPhone 6

label.font = label.font.fontWithSize(20)
} else if UIScreen.mainScreen().bounds.size.width == 414 {
    // iPhone 6+

label.font = label.font.fontWithSize(20)
} else if UIScreen.mainScreen().bounds.size.width == 768 {
    // iPad
}

在 WWDC 2014 中,Apple 为 UITableViewUICollectionView 推出了一项名为“自调整单元格大小”的新功能。您可以将此添加到您的 -(void)viewDidLoad:

tableView.estimatedRowHeight = 44.0; //Or anything else
tableView.rowHeight = UITableViewAutomaticDimension;

有用的文章:Understanding Self Sizing Cells and Dynamic Type in iOS 8

此致,

在iOS7及以后的版本中,可以使用动态类型:

cell.textLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];

请参阅 WWDC 2014 视频,What's New in Table and Collection Views 了解如何执行此操作的说明。

问题是如何改变单元格高度。在 iOS 8 中,默认的 table 视图单元格将自动更改大小。如果您使用自己的带有自定义布局的原型单元格,如果您使用自动布局并且对内容视图有完全定义的约束,那么 table 视图高度将自动为您更改。

不确定您是否使用指定的字体。如果是这样,这是我使用的方法:

+ (int) preferredFontSize : (float) fontSize
{
    NSString *category = [[UIApplication sharedApplication] preferredContentSizeCategory];

    if ([category isEqualToString:UIContentSizeCategoryExtraExtraExtraLarge])
    {
        return fontSize / 0.7;
    }
    else
    {
        if ([category isEqualToString:UIContentSizeCategoryExtraExtraLarge])
        {
            return fontSize / 0.8;
        }
        else
        {
            if ([category isEqualToString:UIContentSizeCategoryExtraLarge])
            {
                return fontSize / 0.9;
            }
            else
            {
                if ([category isEqualToString:UIContentSizeCategoryMedium])
                {
                    return fontSize * 0.9;
                }
                else
                {
                    if ([category isEqualToString:UIContentSizeCategorySmall])
                    {
                        return fontSize * 0.8;
                    }
                    else
                    {
                        if ([category isEqualToString:UIContentSizeCategoryExtraSmall])
                        {
                            return fontSize * 0.7;
                        }
                        else
                        {
                            return fontSize;
                        }
                    }
                }
            }
        }
    }
}

@end