这个问题有很多解决方案,但找不到不推荐。
我有UILabel
模式WordWrap和固定宽度,比方说250.行被设置为0.
以下是我的尝试:
UILabel *contentLabel = (UILabel*)[contentView viewWithTag:10];
CGSize size = [contentLabel.text sizeWithFont:contentLabel.font forWidth:contentLabel.frame.size.width lineBreakMode:NSLineBreakByWordWrapping];
NSLog(@"Label's height is: %d", size.height);
高度参数的输出总是20(所以它就像一行),而te文本就像30行一样。
我需要用于UIScrollView目的。
答案 0 :(得分:55)
使用文档方法中的建议:
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0);
E.g。
CGSize maxSize = CGSizeMake(self.label.frame.size.width, MAXFLOAT);
CGRect labelRect = [self.label.text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.label.font} context:nil];
NSLog(@"size %@", NSStringFromCGSize(labelRect.size));
答案 1 :(得分:4)
我在UILabel的attributionText上直接使用boundingRectWithSize时遇到了麻烦 - 它是不会计换行到多行,(返回的高度始终为17.5)。要解决这个问题,我必须在UILabel的 text 属性上使用boundingRectWithSize并分别传入属性字典(而不是通过[self.myLabel.attributedText attributesAtIndex:0 effectiveRange:nil]
)。
CGRect labelSize = CGRectIntegral([self.myLabel.text
boundingRectWithSize:CGSizeMake(self.myLabel.frame.size.width, MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading
attributes:@{NSFontAttributeName:self.myLabel.font,
NSParagraphStyleAttributeName:paragraphStyle} context:nil]);
答案 2 :(得分:1)
将返回行数
- (int)lineCountForLabel:(UILabel *)label
{
CGFloat labelWidth = label.frame.size.width;
int lineCount = 0;
CGSize textSize = CGSizeMake(labelWidth, MAXFLOAT);
long rHeight = lroundf([label sizeThatFits:textSize].height);
long charSize = lroundf(label.font.leading);
lineCount = (int)( rHeight / charSize );
return lineCount;
}
致电
[self lineCountForLabel:YOUR_LABEL];
答案 3 :(得分:0)
let l = UILabel()
l.numberOfLines = 0
l.layer.frame.size.width = self.view.frame.width - 40 /*(Padding 20 + 20)*/
l.font = UIFont(name: "BwModelica-Bold", size: 16.0)
l.text = "Your Any length Text!!"
let noOfLines = ceil(l.intrinsicContentSize.width) / l.frame.width
let lbl_height = noOfLines * l.intrinsicContentSize.height
这将是您的Label的确切动态高度。编码愉快!
答案 4 :(得分:0)
这对我有用:
*设置UILabel的numberOfLines属性为0 *在将文本分配给 UILabel 之后添加这一行: yourLabel.sizeToFit()
答案 5 :(得分:-3)
试试这个
//Here tweetText is an object of NSString and assign a text to it
NSString *tweetText = tweet.tweetText;
CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);
CGSize size = [tweetText sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:NSLineBreakByWordWrapping];
//detailLabel is an object of UILabel
[detailLabel setText:tweetText];
//Set frame
[detailLabel setFrame:CGRectMake(76,20,280, MAX(size.height, 30.0f))];
答案 6 :(得分:-6)
这是我正在使用的方法:
CGSize maximumSize = CGSizeMake(contentLabel.frame.size.width, 9999);
CGSize myStringSize = [eventName sizeWithFont:contentLabel.font
constrainedToSize:maximumSize
lineBreakMode:UILineBreakModeWordWrap];