Установить максимальное количество строк в uilabel
Мне нужно выполнить специальное выравнивание с uilabel.
Я хочу, чтобы у него было от 1 до 3 строк, независимо от того, что у него есть.
в настоящее время я делаю что-то вроде этого
label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:14.0f];
label.backgroundColor = [UIColor clearColor];
label.numberOfLines = 0;
label.lineBreakMode = UILineBreakModeWordWrap;
label.frame = CGRectMake(114.0f, 88.0f, 187.0f, 0.0f);
[label sizeToFit];
который отлично работает, если текст не слишком длинный. если строка является чем-то вроде @"Hello World"
, UILabel имеет только 14 точек, если она до некоторой степени расширяется.
теперь я хочу, чтобы текст добавлял по умолчанию ...
тройные точки, если текст слишком длинный для трех строк, но с настройкой сверху он расширяется до четвертой строки.
У кого-нибудь есть идея, как добиться этого?
Пожалуйста, оставьте комментарий, если что-то неясно.
Edit:
проверьте это примерное приложение, чтобы просмотреть мою проблему (надеюсь).
Ответы
Ответ 1
label.numberOfLines = 3;
CGSize size = [label.text sizeWithFont:label.font
constrainedToSize:CGSizeMake(SOME_WIDTH,
3 * label.font.lineHeight)
lineBreakMode:UILineBreakModeWordWrap];
label.bounds = CGRectMake(0, 0,
size.width,
size.height);
Ответ 2
Просто установите label.numberOfLines = 3;
.
Это несколько неправильно маркировано, так как оно фактически отображает максимальное количество строк.
Ответ 3
Я думал, что попробую:
func heightForStringDrawing(myString: String, myFont:UIFont, myWidth:CGFloat) -> (CGFloat, Int) {
var tc = NSTextContainer(size: CGSize(width: myWidth, height:CGFloat(FLT_MAX)))
var ts = NSTextStorage(string: myString)
var lm = NSLayoutManager()
lm.addTextContainer(tc)
ts.addLayoutManager(lm)
ts.addAttribute(NSFontAttributeName, value: myFont, range: NSMakeRange(0, ts.length))
tc.lineFragmentPadding = 0.0
lm.glyphRangeForTextContainer(tc)
let height = lm.usedRectForTextContainer(tc).height
let lines = Int(Float(height / myFont.lineHeight))
return (height, lines)
}
Комментарии, безусловно, приветствуются! Я принял это от:
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html
Ответ 4
Вызвать getStringSize
. Он вернет переменную типа StringSize
и решит динамически количество строк.
struct StringSize {
int numberOfLine;
float height;
float width;
};
typedef struct StringSize StringSize;
+(StringSize)getStringSize:(NSString *)string ofWidth:(float)width FontSize:(id)font {
StringSize sizeForString;
if(string){
CGSize size = CGSizeMake(width, 400.0f);
CGSize appStringSize = [string sizeWithFont:(UIFont *)font constrainedToSize:size lineBreakMode:UILineBreakModeTailTruncation];
CGSize sizeString = [string sizeWithFont:font];
sizeForString.width = appStringSize.width;
sizeForString.height = appStringSize.height;
sizeForString.numberOfLine = (int)(sizeForString.height/sizeString.height);
}else {
sizeForString.width = 0;
sizeForString.height = 0;
sizeForString.numberOfLine = 0;
}
return sizeForString;
}