Objective c 禁用某些单词后的换行

Objective c 禁用某些单词后的换行,objective-c,uilabel,line-breaks,Objective C,Uilabel,Line Breaks,我的应用程序中几乎没有UILabel。通过将numberOfLines设置为0,可以将它们全部设置为多行。这样,他们中的一些有1条线,一些有2条线。我的问题是,根据这个应用程序的语言语法,某些单词不应该出现在一行的末尾 例如,让我们有一句话:“约翰正在收集化石和邮票” 这一行将足够长,以便在单词“and”之后出现换行。根据语法,这是不应该发生的,所以我想在这个单词前面换行,而不是换行后换行: John is collecting fossils and stamps 我想得到: John is

我的应用程序中几乎没有UILabel。通过将numberOfLines设置为0,可以将它们全部设置为多行。这样,他们中的一些有1条线,一些有2条线。我的问题是,根据这个应用程序的语言语法,某些单词不应该出现在一行的末尾

例如,让我们有一句话:“约翰正在收集化石和邮票”

这一行将足够长,以便在单词“and”之后出现换行。根据语法,这是不应该发生的,所以我想在这个单词前面换行,而不是换行后换行:

John is collecting fossils and
stamps
我想得到:

John is collecting fossils
and stamps

有可能做到这一点吗?我使用的是iOS 7及更高版本,因此不必关心与旧iOS版本的兼容性。

解决方案是使用2种方法创建UILabel的子类。假设我只想禁用单词“a”后的换行(类似的解决方案可以是多个单词):

将被替换的字符串是“a”,这是一个标准的“a”和空格。将替换它的字符串在屏幕上看起来相同,但它是“a”且不间断空格(在MAC上为-Option+space)。以将文本设置为UILabel的标准方式设置任何文本都将始终按需要工作,但将字符串与标签文本进行比较将不起作用(但很容易通过将不可拆分的空格替换为用于比较的空格来解决这一问题)。在故事板或笔尖中设置文本自然不起作用

- (void)setText:(NSString*)newText {

    [super setText:[self fixSpaces:newText]];

}

- (NSString*)fixSpaces:(NSString*)originalText {

    NSMutableString* tempString = [[NSMutableString alloc] initWithString:originalText];
    [tempString replaceOccurrencesOfString:@"a " withString:@"a " options:NSLiteralSearch range:NSMakeRange(0, tempString.length)];
    return tempString;

}