1

我正在尝试为 UIButton 中的 textLabel 设置换行模式。

self.scheduleButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;

NSLineBreakByWordWrapping在 iOS 6.0 之前将不可用。

self.scheduleButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap;

将在 iOS6 之前工作,但 XCode 抛出错误说,它不识别UILineBreakModeWordWrap.

如何确保在 iOS 6 之前完全忽略 UILineBreakModeWordWrap 代码。

我已经制作了一个宏来检查操作系统版本,我会使用 respondsToSelector,如果它是一个方法的情况,但这是一个枚举类型。

SYSTEM_VERSION_LESS_THAN(@"6.0")

我在这里使用它,但在 if-else 场景中,但它仍然无法正常工作,因为 XCode 仍然会告诉我 UILineBreakModeWordWrap 无法识别。

有没有办法在预处理级别知道操作系统版本?

#define SYSTEM_VERSION_LESS_THAN(v)                ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

我制作的这个宏只会添加 Objective C 代码来确定操作系统类型,这意味着检查将在运行时进行。

但因为这个 XCode 不会忽略UILineBreakModeWordWrap.

4

2 回答 2

6

两者NSLineBreakByWordWrappingUILineBreakModeWordWrap具有相同的价值。只要您的 Base SDK 是 6.0 或更高版本,那么使用NSLineBreakByWordWrapping将使编译器满意,并且它可以在运行时适用于任何版本的 iOS。

于 2013-08-13T06:51:22.113 回答
1

选项1

您可以创建自己的宏来处理此问题:

#ifdef __IPHONE_6_0
# define LINE_BREAK_MODE_WORD_WRAP NSLineBreakByWordWrapping
#else
# define LINE_BREAK_MODE_WORD_WRAP UILineBreakModeWordWrap
#endif

现在在您可以使用的代码中,LINE_BREAK_MODE_WORD_WRAP

选项:2

直接使用枚举值而不是引用名称,两者NSLineBreakByWordWrappingUILineBreakModeWordWrap具有相同的值 - 0

因此你也可以直接这样写——

self.scheduleButton.titleLabel.lineBreakMode = 0;

它会自动从 iOS SDK 枚举引用中获取第 0 个值。

希望这可以帮助。

于 2013-08-13T06:54:28.037 回答