UILabel – видимая часть текста

Есть ли способ получить видимую часть текста в слове, обернутом UILabel ? Я имею в виду именно последний видимый персонаж?

Я хотел бы сделать два ярлыка, округляющие изображение, и хотел бы продолжить текст, который был неправым для первого ярлыка на втором.

Я знаю [NSString sizeWithFont...] но есть ли что-то вроде « [NSString stringVisibleInRect: withFont:...] ? 🙂

Заранее спасибо.

Вы можете использовать категорию для расширения NSString и создания метода, который вы упоминаете

 @interface NSString (visibleText) - (NSString*)stringVisibleInRect:(CGRect)rect withFont:(UIFont*)font; @end @implementation NSString (visibleText) - (NSString*)stringVisibleInRect:(CGRect)rect withFont:(UIFont*)font { NSString *visibleString = @""; for (int i = 1; i <= self.length; i++) { NSString *testString = [self substringToIndex:i]; CGSize stringSize = [testString sizeWithFont:font]; if (stringSize.height > rect.size.height || stringSize.width > rect.size.width) break; visibleString = testString; } return visibleString; } @end 

Вот метод O (log n) с API iOS 7. Только поверхностно проверенные, прокомментируйте, если вы найдете какие-либо ошибки.

 - (NSRange)hp_visibleRange { NSString *text = self.text; NSRange visibleRange = NSMakeRange(NSNotFound, 0); const NSInteger max = text.length - 1; if (max >= 0) { NSInteger next = max; const CGSize labelSize = self.bounds.size; const CGSize maxSize = CGSizeMake(labelSize.width, CGFLOAT_MAX); NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; paragraphStyle.lineBreakMode = self.lineBreakMode; NSDictionary * attributes = @{NSFontAttributeName:self.font, NSParagraphStyleAttributeName:paragraphStyle}; NSInteger right; NSInteger best = 0; do { right = next; NSRange range = NSMakeRange(0, right + 1); NSString *substring = [text substringWithRange:range]; CGSize textSize = [substring boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size; if (textSize.width <= labelSize.width && textSize.height <= labelSize.height) { visibleRange = range; best = right; next = right + (max - right) / 2; } else if (right > 0) { next = right - (right - best) / 2; } } while (next != right); } return visibleRange; } 
  • UINavigationBar многострочное название
  • Как создать изображение из UILabel?
  • Как создать привязанную строку с помощью Swift?
  • Обработка события Touch в UILabel и подключение его к IBAction
  • Xcode - обновить текст метки ViewController с другого вида
  • Как определить размер шрифта UILabel, когда -adjustsFontSizeToFitWidth установлен на YES?
  • Как сделать UILabel доступным?
  • Подчеркивать текст в UIlabel
  • Ширина пикселя текста в UILabel
  • iPhone - UILabel, содержащий текст с несколькими шрифтами одновременно
  • Как отрегулировать размер шрифта метки для соответствия прямоугольнику?
  • Interesting Posts

    Android ==> Анализ памяти ==> Анализатор памяти Eclipse?

    Связывание нескольких параметров с запросом mysqli

    Подключить 4 проверить для алгоритма выигрыша

    Как использовать 32-разрядные собственные библиотеки на 64-битном Android-устройстве

    Спящий ярлык в win7

    Как нарисовать линию gradleиента (затухание в / из) с помощью Core Graphics / iPhone?

    У меня есть 4 порта Ethernet RJ45, которые были ограничены до 200 КБ в секунду. Как использовать все 4 порта для ускорения моего сетевого подключения?

    jqGrid: проблема загрузки вложенной подсетей с локальным типом данных

    Можно ли сделать консоль полным экраном?

    Включая гиперссылки в ссылках на Microsoft Word 2013

    Преобразование строк в дату mm / dd / yy до YYYY-MM-DD в java

    Как использовать Bash для создания папки, если она еще не существует?

    Почему счетчик производительности процессора постоянно сообщал об использовании 0% CPU?

    jquery .live (‘click’) vs .click ()

    В чем разница между задачей и streamом?

    Давайте будем гением компьютера.