Как получить размер NSString

«Быстро»: как я могу получить размер (ширину) NSString?

Я пытаюсь увидеть, если строка ширины строки, чтобы увидеть, если она больше, чем заданная ширина экрана, случай, когда я должен «обрезать» его и добавить его с помощью «…», получив обычное поведение UILabel. string.length не будет делать трюк, поскольку AAAAAAAA и iiiiii имеют одинаковую длину, но разные размеры (например).

Я как бы застрял.

Большое спасибо.

Это другой подход. Узнайте минимальный размер текста, чтобы он не обернулся более чем в одну строку. Если он обернут более одной строки, вы можете узнать, используя высоту.

Вы можете использовать этот код:

CGSize maximumSize = CGSizeMake(300, 9999); NSString *myString = @"This is a long string which wraps"; UIFont *myFont = [UIFont fontWithName:@"Helvetica" size:14]; CGSize myStringSize = [myString sizeWithFont:myFont constrainedToSize:maximumSize lineBreakMode:self.myLabel.lineBreakMode]; 

300 – ширина экрана с небольшим пространством для полей. Вы должны подставить свои собственные значения для шрифта и размера, а также для lineBreakMode если вы не используете IB.

Теперь myStringSize будет содержать height которую вы можете проверить против высоты того, что вы знаете, только с 1 строкой (с использованием того же шрифта и размера). Если он больше, вам нужно будет отрезать текст. Обратите внимание, что вы должны добавить … в строку, прежде чем вы ее снова проверите (добавление … может снова нажать ее за пределы).

Поместите этот код в цикл, чтобы вырезать текст, затем снова проверьте правильную высоту.

Используйте метод ниже.

Objective-C

 - (CGSize)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font { CGSize size = CGSizeZero; if (text) { CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font } context:nil]; size = CGSizeMake(frame.size.width, frame.size.height + 1); } return size; } 

Swift 3.0

 func findHeight(forText text: String, havingWidth widthValue: CGFloat, andFont font: UIFont) -> CGSize { var size = CGSizeZero if text { var frame = text.boundingRect(withSize: CGSize(width: widthValue, height: CGFLOAT_MAX), options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil) size = CGSize(width: frame.size.width, height: frame.size.height + 1) } return size } 

Для измерения строки необходимо использовать Core Graphics, как показано в указанном шрифте и размере. См. Ответы на « Измерение ширины пикселя строки для прохода».

 sizeWithFont:constrainedToSize:lineBreakMode 

теперь устарела. Используйте ниже fragment кода,

 UIFont *font=[UIFont fontWithName:@"Arial" size:16.f]; NSString *name = @"APPLE"; CGSize size = [name sizeWithAttributes:@{NSFontAttributeName:font}]; 
  • CSS: 100% ширина или высота при сохранении пропорций?
  • Можно ли использовать jQuery для получения ширины элемента в процентах или пикселях в зависимости от того, что разработчик указал с помощью CSS?
  • jQuery - Получить ширину элемента, если он не отображается (Дисплей: Нет)
  • Свойство CSS \ 9 в ширине
  • Каково максимальное значение пикселя для свойств ширины и высоты CSS?
  • В чем разница между Width и ActualWidth в WPF?
  • Давайте будем гением компьютера.