【发布时间】:2014-11-27 18:59:27
【问题描述】:
Xcode 6 有一个新功能,其中UILabel、UITextField 和UIButton 中的字体 和字体大小根据当前设备配置的大小等级自动设置,就在情节提要中。例如,您可以设置UILabel 以在“任意宽度、紧凑高度”(例如在横向 iPhone 上)配置上使用字体大小 12,在“常规宽度、常规高度”配置(例如在 iPad)。更多信息可在此处获得:
developer.apple.com/size_class
理论上这是一个很棒的功能,因为它可以使您无需根据设备配置以编程方式在 UI 功能上设置不同的字体。现在,我有一些条件代码可以根据设备类型设置字体,但显然,这意味着我必须在整个应用程序的任何地方以编程方式设置字体。所以一开始我对这个功能非常兴奋,但是我发现它对我来说在实际使用中存在严重的问题(可能是一个错误)。请注意,我是针对 SDK 8 构建的,并设置了 iOS 8 的最低部署目标,因此这与与旧版本 iOS 的兼容性无关。
问题是这样的: 如果我为不同的size classes设置不同的字体大小,并使用iOS提供的"System" font,一切都会按预期工作,并且字体大小会根据size class而变化.如果我使用我的应用程序提供的自定义字体(是的,我在我的应用程序包中正确设置了它,因为它以编程方式工作)并将自定义字体设置为 XCode 中的 label 6 故事板,也可以按预期工作。但是当我尝试为不同大小的类使用不同大小的自定义字体时,在情节提要中,它突然不起作用。配置的唯一区别是我选择的字体(自定义字体与系统字体)。相反,所有字体在设备和模拟器上显示为默认系统字体在默认大小,无论大小类(和我通过调试器验证它正在用系统字体替换情节提要中指定的实际字体)。所以基本上,自定义字体的大小类功能似乎被破坏了。此外,有趣的是,自定义字体实际上在视图控制器的 XCode 6“预览”窗格中正确显示和调整大小:它仅在实际 iOS 系统上运行时才停止工作(这让我认为我正在正确配置它) .
我尝试了多种不同的自定义字体,但似乎对它们都不起作用,但如果我改用“系统”,它总是有效的。
还有其他人在 Xcode 6 中看到过这个问题吗?
关于这是否是 iOS 8、Xcode 或其他问题的任何想法
我做错了吗?
正如我所说,我发现的唯一解决方法是继续以编程方式设置字体,就像我在大约三个 iOS 版本中所做的那样,因为这确实有效。
但如果我可以让它与自定义字体一起使用,我希望能够使用此功能。我们的设计不接受使用 System 字体。
附加信息: 从 Xcode 8.0 开始,该错误已修复。
【问题讨论】:
-
我可以确认在 xCode 6.1 (6A1052d) 应用商店版本中仍然是这种情况。
-
不是解决方案,但我已经设法使用类别解决了这个问题。我的 UILabel+Font.h 类别(我也有一个用于按钮的)包含以下代码。 -(void)awakeFromNib { float size = [self.font pointSize]; self.font = [UIFont fontWithName:@"YourCustomFont" size:size];因此,这允许我们使用带有系统字体的尺寸类来设置不同尺寸类中的点值,并且类别确保设置了正确的字体。也许您可以在 Apple 发布更新之前尝试一下?
-
Xcode 6.3.1 中仍未解决。我对此很生气。
-
仍然无法使用 Xcode 7 final。不明白为什么 Apple 不修复它。
-
仍然无法在 Xcode 7.2 iOS 9.2 上运行
标签: ios interface-builder ios8 xcode6 size-classes