如何根据设备大小在 Marco.h 中定义字体大小?

Posted

技术标签:

【中文标题】如何根据设备大小在 Marco.h 中定义字体大小?【英文标题】:How can I define font size in Marco.h base on device size? 【发布时间】:2018-12-27 04:29:58 【问题描述】:

我想根据设备大小定义标签字体大小。这是我到目前为止所做的,但没有奏效。

宏.h

#define ScreenH [UIScreen mainScreen].bounds.size.height
#define ScreenW [UIScreen mainScreen].bounds.size.width

//Weakself
#define WEAKSELF __weak typeof(self) weakSelf = self;

//Screen
#define iphone5 (ScreenH == 568)     // Width = 320  [iphone5 | iphone5S | iphoneSE]
#define iphone6 (ScreenH == 667)     // Width = 375  [iphone6 | iphone6S | iphone7 | iphone8]
#define iphone6p (ScreenH == 736)    // Width = 414  [iphone6P | iphone6SP | iphone7P]
#define iphoneX (ScreenH == 812)     // Width = 375  [iphoneX]
#define ipadAir2 (ScreenH == 1024)   // Width = 768  [ipad(5G) | ipadAir | ipadAir2 | iPadPro(9.7)]
#define ipadPro105 (ScreenH == 1112) // Width = 834  [iPadPro(10.5)]
#define iPadPro129 (ScreenH == 1366) // Width = 1024 [iPadPro(12.9) | iPadPro(12.9 2G)]

//Font
#define PFR [[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0 ? @"FiraSans-Regular" : @"FiraSans-Regular"
#define PFR20Font [UIFont fontWithName:PFR size:20];
#define PFR18Font [UIFont fontWithName:PFR size:18];
#define PFR16Font [UIFont fontWithName:PFR size:16];
#define PFR15Font [UIFont fontWithName:PFR size:15];
#define PFR14Font [UIFont fontWithName:PFR size:14];
#define PFR13Font [UIFont fontWithName:PFR size:13];
#define PFR12Font [UIFont fontWithName:PFR size:12];
#define PFR11Font [UIFont fontWithName:PFR size:11];
#define PFR10Font [UIFont fontWithName:PFR size:10];

#define TittleFont  (ScreenH == 568) ? [UIFont fontWithName:PFR size:11] : (ScreenH == 667)  ? [UIFont fontWithName:PFR size:12] : (ScreenH == 736) ? [UIFont fontWithName:PFR size:12] : (ScreenH == 812) ? [UIFont fontWithName:PFR size:12] : (ScreenH == 1024) ? [UIFont fontWithName:PFR size:14] : (ScreenH == 1112) ? [UIFont fontWithName:PFR size:16] : (ScreenH == 1366) ? [UIFont fontWithName:PFR size:16];

ViewController.m

_lblMerchantName = [[UILabel alloc] init];
_lblMerchantName.font = TittleFont;  //Here will hit error "Expected expression"
[self addSubview:_lblMerchantName];

请帮忙。谢谢。

【问题讨论】:

你能在你定义ScreenHPFR的地方添加代码吗? @trungduc 使用 ScreenH 和 PFR 定义编辑 我只看到#define ScreenW,但在任何地方都看不到#define ScreenH。你确定你定义了它吗? 【参考方案1】:

我没有看到您在问题中定义 ScreenH 的位置,我假设您将其定义为

#define ScreenH [UIScreen mainScreen].bounds.size.height

你的代码有一些问题。

我认为应该是TitleFont 而不是TittleFont :)

正如我所见,您定义了#define iphone5 (ScreenH == 568),所以当您定义TittleFont 时,让使用iphone5 而不是(ScreenH == 568),与另一种情况相同

不需要在TitleFont定义的末尾使用;

你忘了给TitleFont一个默认字体(在else语句中)。

在下面试试我的代码,它成功了。

#define ScreenH [UIScreen mainScreen].bounds.size.height

//Weakself
#define WEAKSELF __weak typeof(self) weakSelf = self;

//Screen
#define iphone5 (ScreenH == 568)     // Width = 320  [iphone5 | iphone5S | iphoneSE]
#define iphone6 (ScreenH == 667)     // Width = 375  [iphone6 | iphone6S | iphone7 | iphone8]
#define iphone6p (ScreenH == 736)    // Width = 414  [iphone6P | iphone6SP | iphone7P]
#define iphoneX (ScreenH == 812)     // Width = 375  [iphoneX]
#define ipadAir2 (ScreenH == 1024)   // Width = 768  [ipad(5G) | ipadAir | ipadAir2 | iPadPro(9.7)]
#define ipadPro105 (ScreenH == 1112) // Width = 834  [iPadPro(10.5)]
#define iPadPro129 (ScreenH == 1366) // Width = 1024 [iPadPro(12.9) | iPadPro(12.9 2G)]

//Font
#define PFR [[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0 ? @"FiraSans-Regular" : @"FiraSans-Regular"
#define PFR20Font [UIFont fontWithName:PFR size:20];
#define PFR18Font [UIFont fontWithName:PFR size:18];
#define PFR16Font [UIFont fontWithName:PFR size:16];
#define PFR15Font [UIFont fontWithName:PFR size:15];
#define PFR14Font [UIFont fontWithName:PFR size:14];
#define PFR13Font [UIFont fontWithName:PFR size:13];
#define PFR12Font [UIFont fontWithName:PFR size:12];
#define PFR11Font [UIFont fontWithName:PFR size:11];
#define PFR10Font [UIFont fontWithName:PFR size:10];

#define kDefaultTitleFont [UIFont fontWithName:PFR size:16]

#define TittleFont  iphone5 ? [UIFont fontWithName:PFR size:11] : iphone6  ? [UIFont fontWithName:PFR size:12] : iphone6p ? [UIFont fontWithName:PFR size:12] : iphoneX ? [UIFont fontWithName:PFR size:12] : ipadAir2 ? [UIFont fontWithName:PFR size:14] : ipadPro105 ? [UIFont fontWithName:PFR size:16] : iPadPro129 ? [UIFont fontWithName:PFR size:16] : kDefaultTitleFont

【讨论】:

现在是建议 UIFont 类别可能更适合的好时机吗?然后你创建一个方法 titleFont ,你可以在任何地方使用它。它通过删除该宏在各处插入的重复代码来减少整体应用程序的大小。 [UIFont 标题字体];完成。 @ekscrypto 实际上,在这种情况下,类别(你说的扩展名)总是比宏好。但这取决于OP。也许他有一些理由使用宏而不是类别:) 也许您可以使用 PFR11Font、PFR12Font.... 而不是“[UIFont fontWithName:PFR size:11]”,如果您已经在代码中添加了它...只是一个建议。

以上是关于如何根据设备大小在 Marco.h 中定义字体大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据tailwindcss应用自定义字体大小

如何根据文本字段的大小调整字体大小?

如何根据WatchKit中的手表大小缩放字体大小?

根据设备大小在多行 UIButton 上缩放字体

根据设备更改字体大小

Xcode 6 大小类中的自定义字体大小无法与自定义字体一起正常工作