在我的应用程序中,如果文本输入很大,我需要在文本视图中设置Read more.所以我的方法是找到适合文本视图的字符串范围并附加查看更多信息.有没有办法实现它在
Swift中.要求是模拟阅读更多选项以在详细视图中显示完整文本,如facebook.
解决方法
您正在寻找的功能是
CTFramesetterSuggestFrameSizeWithConstraints
.基本上,它允许您找出适合某个帧的字符数.您可以使用该数字来剪切当前文本并插入按钮.
我为UILabel的子类编写了这个函数的实现:
- (NSInteger)numberOfCharactersThatFitLabel { // Create an 'CTFramesetterRef' from an attributed string CTFontRef fontRef = CTFontCreateWithName((CFStringRef)self.font.fontName,self.font.pointSize,NULL); NSDictionary *attributes = [NSDictionary dictionaryWithObject:(__bridge id)fontRef forKey:(id)kCTFontAttributeName]; CFRelease(fontRef); NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:self.text attributes:attributes]; CTFramesetterRef frameSetterRef = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attributedString); // Get a suggested character count that would fit the attributed string CFRange characterFitRange; CTFramesetterSuggestFrameSizeWithConstraints(frameSetterRef,CFRangeMake(0,0),NULL,CGSizeMake(self.bounds.size.width,self.numberOfLines*self.font.lineHeight),&characterFitRange); CFRelease(frameSetterRef); return (NSInteger)characterFitRange.length; }
Here’s a bog post用于完全实现将随机文本剪切为指定行数并向其添加“查看更多”文本.