Objective c ui标签换行/字符换行
我有一个将Objective c ui标签换行/字符换行,objective-c,ios,cocoa-touch,uilabel,Objective C,Ios,Cocoa Touch,Uilabel,我有一个将lineBreakMode设置为uilinebreakmodewrap的UILabel。这很好,除非我有一个没有空格的长文本。在这种情况下,它不会包裹长文本板,而是在到达UILabel框架的右端时将其切断。我如何告诉UILabel,在这种情况下,它应该仅在字符边界上换行(基本上等同于UILineBreakModeCharacterWrap设置,但仅适用于那些无空格的长文本) 提前谢谢 你必须自己动手,没有“使用文字包装,除非我不想让你这么做”的选项:) 如果单词太长,可以在显示之前在其
lineBreakMode
设置为uilinebreakmodewrap
的UILabel。这很好,除非我有一个没有空格的长文本。在这种情况下,它不会包裹长文本板,而是在到达UILabel框架的右端时将其切断。我如何告诉UILabel,在这种情况下,它应该仅在字符边界上换行(基本上等同于UILineBreakModeCharacterWrap
设置,但仅适用于那些无空格的长文本)
提前谢谢 你必须自己动手,没有“使用文字包装,除非我不想让你这么做”的选项:)
如果单词太长,可以在显示之前在其中插入空格,以帮助标签知道在何处换行?一种方法是在IB中设置Lines属性 或根据《守则》—
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 3;
因此,当您将行数设置为3时,文本将换行,直到有那么多行被占用。dean是对的。如果你想要它,你必须手动操作。下面的代码将对标签进行文字包装,即使它没有空格。这可能会有帮助
NSString *someText = yourLabel.text;
//Check if the text contains spaces
//The method in the below if condition is user defined and you have to define one. lol
if(![self textContainsSpaces:someText])
{
//Do the word wrap manually
CGSize constraintSize;
constraintSize.width = 165;
constraintSize.height = 165;
CGSize stringSize =[someText sizeWithFont: [UIFont boldSystemFontOfSize: 17] constrainedToSize: constraintSize lineBreakMode: UILineBreakModeWordWrap];
CGRect rect = CGRectMake(yourLabel.frame.origin.x, yourLabel.frame.origin.y, 165, (stringSize.height+10));
yourLabel.frame = rect;
}
对于其他有同样问题的人,我最终通过使用
UITextView
而不是UILabel
解决了这个问题。这是最好的解决方案,原因有二:
UILabel
的换行模式更改为word/character wrapUILabel
。UITextView
自动处理这种情况,根据需要打破单词边界或字符边界UITextView
,其中禁用了编辑和滚动。我还设置了.contentInset
,以移除填充物,使其看起来(在不知情的人看来)就像UILabel
。然后,我使用sizeWithFont:constrainedToSize:lineBreakMode:
方法来确定渲染文本的框架,并相应地调整UITextView
的框架,使其完全适合文本
希望这有帮助 OP特别想要“word wrap”,如果他只有一个单词(例如“Llanfairpwlgwyngyllgogerychwyrndrobwllllantysiliogogogogoch”,它比文本框宽),就不会自动换行,不管你给它多少行:)给未来读者(像我一样)的提示:使用iOS 7和SDK 8进行测试,UILineBreakModeWordWrap现在看起来像人们希望的那样工作。也就是说,在可能的情况下,它是按单词来划分的,但如果需要的话,它是按字符来划分的。这是一个UILabel。