我有一个UILabel,其中lineBreakMode
设置为UILineBreakModeWordWrap
。这工作正常,除非我有一长串文字没有空格。在这种情况下,它不包裹长长的文本块,而是在它到达UILabel帧的右端时将其切断。我怎么能告诉UILabel它应该在这种情况下包装在角色边界上只有(基本上相当于UILineBreakModeCharacterWrap
设置,但只适用于无空间文本的长板)。UILabel Word Wrap/Character Wrap
在此先感谢!
我有一个UILabel,其中lineBreakMode
设置为UILineBreakModeWordWrap
。这工作正常,除非我有一长串文字没有空格。在这种情况下,它不包裹长长的文本块,而是在它到达UILabel帧的右端时将其切断。我怎么能告诉UILabel它应该在这种情况下包装在角色边界上只有(基本上相当于UILineBreakModeCharacterWrap
设置,但只适用于无空间文本的长板)。UILabel Word Wrap/Character Wrap
在此先感谢!
你必须做你自己,还有“除非我不希望你使用自动换行”为没有选择:)
如果一个词太长,你可以前插入空格到它你展示它来帮助标签知道在哪里包装?
这样做的一种方法是在IB中设置Lines属性。当你设置的行数为3的文本换行到那很多线路都占据
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 3;
所以 -
或代码做到这一点。
如果他有一个单词(例如'Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch',它比文本框更宽),那么OP就会特别想要'自动换行',不管你给它多少行:) – deanWombourne
院长是对的。如果你想要它,你必须手动完成。下面的代码将wordwrap一个标签,即使它没有空格。这可能有助于
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
的换行模式/。
更重要的是,有一个边缘情况下,您可能会有正常的单词(您想要在单词边界上换行)加上超长文本(您需要在字符边界上换行)。写一些逻辑来在超长文本中插入空格(在正确的位置)来强制“伪单词换行”我根本看不到任何处理文字和字符换行的方法,具体取决于情况,在一个UILabel
内。 UITextView
自动处理这种情况,必要时打破字边界或字符边界。
关于我如何做这件事的具体细节,我有一行UITextView
,禁用了编辑和滚动功能。我还设置了.contentInset
以删除填充,使其看起来像(不知情的眼睛),就像UILabel
一样。然后,我使用sizeWithFont:constrainedToSize:lineBreakMode:
方法来确定渲染文本的帧,并相应地调整UITextView
的帧,以使其完全符合文本。
希望这有助于!
未来的读者请注意(像我一样):使用iOS 7和SDK 8进行测试时,UILineBreakModeWordWrap看起来像现在希望的那样工作。也就是说,如果可能的话,它会通过单词分解,但如果需要则通过字符分解这个如果用于UILabel。 – eselk