我的应用中有很少的UILabel。通过将numberOfLines设置为0,所有这些都被设置为多行。这样,其中一些有1行,有些有2.我的问题是,根据这个应用程序的语言语法,某些单词永远不应该在最后一条线。
例如,让我们说:“约翰正在收集化石和邮票。”
此行将长期用于在“和”之后出现换行符。根据语法,这不应该发生,所以我想在这个词之前断行,所以不要在换行之后:
John is collecting fossils and
stamps
我想得到:
John is collecting fossils
and stamps
有可能实现这一目标吗?我正在使用iOS 7及更高版本,因此无需关心与旧iOS版本的兼容性。
答案 0 :(得分:0)
解决方案是使用2种方法创建UILabel的子类。让我们假设,我只想在单词“a”之后禁用换行符(类似的解决方案可以包含多个单词):
- (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;
}
将被替换的字符串是“a”,即标准的“a”和空格。将替换它的字符串在屏幕上看起来是相同的,但它是'a'且不间断的空间(在MAC上 - Option + Space)。以标准方式将文本设置为UILabel设置任何文本将始终按照需要工作,但将字符串与标签文本进行比较将不起作用(但通过用空格替换不可分隔空格以进行比较,很容易解决)。在storyboard或nib中设置文本自然不起作用。