Получение CGSize для NSString?
Я пытаюсь получить CGSize
для NSString
но у меня проблемы. Вот код, который я использую:
CGFloat actualMessageFontSize;
CGSize messageSize =
[message sizeWithFont:[UIFont fontWithName:@"Helvetica-Bold"
size:14.0f]
minFontSize:14.0f
actualFontSize:&actualMessageFontSize
forWidth:(alertViewWidth - textIndent)
lineBreakMode:NSLineBreakByWordWrapping];
я NSLog
CGSize
после этого кода и высота не меняется, даже если я ставлю массивный NSString
внутрь. Знаете ли вы, почему это может произойти и что я должен попробовать вместо этого?
Благодарю.
2 ответа
Решение
Использовать этот метод и
-(float) calculateHeightOfTextFromWidth:(NSString*) text: (UIFont*)withFont: (float)width :(UILineBreakMode)lineBreakMode
{
[text retain];
[withFont retain];
CGSize suggestedSize = [text sizeWithFont:withFont constrainedToSize:CGSizeMake(width, FLT_MAX) lineBreakMode:lineBreakMode];
[text release];
[withFont release];
return suggestedSize.height;
}
и использовать его как ниже... я использую это для UILable
увидеть код..
UILabel *lblAddress = [[UILabel alloc]init];
[lblAddress setFrame:CGRectMake(110, 31, 200, 31)];
lblAddress.text = @"ABDKFNKG KKGK jfnjgdf gdklfg fldgmfkgml f";
lblAddress.lineBreakMode = UILineBreakModeWordWrap;
lblAddress.numberOfLines = 0;///write this line for multiple line and set 0 or anything lese
lblAddress.font = [UIFont fontWithName:@"Helvetica" size:12];
lblAddress.frame = CGRectMake(lblAddress.frame.origin.x, lblAddress.frame.origin.y,
200,[self calculateHeightOfTextFromWidth:lblAddress.text :lblAddress.font :200 :UILineBreakModeWordWrap] );
lblAddress.textColor = [UIColor darkGrayColor];
[self.view addSubview:lblAddress];
У вас есть смена кадра UILabel
или же UITextView
какой из них может использовать, чтобы измениться соответственно.
CGFloat actualMessageFontSize = 12.0;
CGSize messageSize = [message sizeWithFont:[UIFont fontWithName:@"Helvetica-Bold" size:14.0f] minFontSize
//set frame accordingly
yourLabel.frame = CGReactMake(yourLabel.frame.origin.x,yourLabel.frame.origin.y,messageSize.width,messageSize.wiheight,);