Установка вертикального выравнивания усеченных хвостов для NSAttributedString с NSTextAttachment

Я использую следующий код для создания NSAttributedString для UILabel в iOS 8.

 // a long long Chinese title NSString *title = @"这是一个很长很长很长很长很长很长的中文标题"; // setup icon attachment NSTextAttachment *iconAttachment = [[NSTextAttachment alloc] init]; iconAttachment.image = [UIImage imageNamed:imageName]; iconAttachment.bounds = bounds; NSAttributedString *ycardImageString = [NSAttributedString attributedStringWithAttachment:iconAttachment]; // setup attributed text NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:title]; if (shouldShowYcard) { [attributedText insertAttributedString:ycardImageString atIndex:0]; [attributedText insertAttributedString:[[NSAttributedString alloc] initWithString:@" "] atIndex:1]; [attributedText addAttribute:NSBaselineOffsetAttributeName value:@(offset) range:NSMakeRange(0, 1)]; } NSRange titleRange = NSMakeRange(shouldShowYcard ? 2 : 0, title.length); [attributedText addAttribute:NSFontAttributeName value:font range:titleRange]; [attributedText addAttribute:NSForegroundColorAttributeName value:color range:titleRange]; 

Однако кажется, что NSTextAttachment будет влиять на вертикальное положение усеченных хвостов, как и на следующих изображениях.

NSAttributedString с NSTextAttachment NSAttributedString без NSTextAttachment NSAttributedString с NSTextAttachment на английском языке NSAttributedString без NSTextAttachment На английском языке

Есть ли способ установить вертикальное выравнивание для усеченных хвостов?

Моя цель – иметь нижние выравнивающие хвосты на китайском языке.

Это значок для теста. значок

Попробуй это

  UILabel *lbl = [[UILabel alloc]initWithFrame:CGRectMake(50, 300, 300, 30)]; [self.view addSubview:lbl]; NSString *t= @"这是一个很长很长很长很长很长很长的中文标题漢字"; NSTextAttachment *iconatt = [[NSTextAttachment alloc]init]; iconatt.image = [UIImage imageNamed:@"phnzY.png"]; iconatt.bounds = CGRectMake(0, 0, 44, 22); NSAttributedString *ycardstring = [NSAttributedString attributedStringWithAttachment:iconatt]; NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:t]; [attributedText insertAttributedString:ycardstring atIndex:0]; [attributedText insertAttributedString:[[NSAttributedString alloc] initWithString:@" "] atIndex:1]; [attributedText addAttribute:NSBaselineOffsetAttributeName value:@(0.0) range:NSMakeRange(0, 1)]; NSRange titleRange = NSMakeRange( 0 , t.length); [attributedText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:22.0] range:titleRange]; [attributedText addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:titleRange]; lbl.attributedText = attributedText; 

Это даст результат.

вывод

Вы можете попытаться использовать NSMutableParagraphStyle для установки параметра paragraphStyle. Вот код:

  let label1 = UILabel(frame: CGRect(x: 50, y: 50, width: 100, height: 30)) let label2 = UILabel(frame: CGRect(x: 50, y: 90, width: 100, height: 30)) view.addSubview(label1) view.addSubview(label2) let t = "12341421dsadyusatdiuwtquyidtywatyudigsaydgsadysaghdkgaugduiyyudgasgdj" let iconAttachment = NSTextAttachment() iconAttachment.image = UIImage(named: "caseEditorBtn0") iconAttachment.bounds = CGRect(x: 0, y: 0, width: 20, height: 30); let ycardImageString = NSAttributedString(attachment: iconAttachment) let yT0 = NSMutableAttributedString(string: t) let yT1 = NSMutableAttributedString(string: t) let p = NSMutableParagraphStyle() p.lineBreakMode = .byTruncatingTail //set line break model p.alignment = .right //set aligment yT1.setAttributes([NSParagraphStyleAttributeName: p], range: NSRange(location: 0, length: yT1.length)) yT0.setAttributes([NSParagraphStyleAttributeName: p], range: NSRange(location: 0, length: yT0.length)) //insert you custom text attachment at last, or it may be not show yT0.insert(ycardImageString, at: 0) label1.attributedText = yT0 label2.attributedText = yT1 

ОК, наконец, я выбрал уродливый способ исправить эту проблему, установив NSBaselineOffsetAttributeName для хвоста усечения.

Вот способ вычисления усеченной части. Но в моем случае моя ширина ярлыка фиксирована так, что я могу напрямую установить диапазон для управления.

 if (title.length > 10 && ([[[UIDevice currentDevice] systemVersion] floatValue] < 9.0)) { [attributedText addAttribute:NSBaselineOffsetAttributeName value:@(-4) range:NSMakeRange(9, 1)]; } 
  • Как запретить текстовую оболочку UITableViewCell обрезать текст на iPad
  • Изогнутая модификация текстового кода
  • Как отформатировать разные символы в строке UILabel по-разному?
  • Сделать эффект встряски для ярлыка в ios?
  • Autoshrink на UILabel с несколькими линиями
  • Определите, сколько символов в UILabel усечено
  • Почему элемент управления меткой не переносится на несколько строк после того, как я выбираю эту опцию
  • Как объединить только два верхних угла UILabel?
  • numberOfLines UILabel не работает в ячейке
  • Настройка текста меток в другом классе
  • О проблеме вращения устройства с помощью MTLabel
  • Interesting Posts

    Файл Parse / Parse.h не найден после обновления с помощью Cocoapods

    Сколько устройств мы можем подключить через Bluetooth к iPhone?

    Каков стандартный шрифт и размер для заголовка навигации iPhone?

    Достижимость iOS – проблемы с медленными и отсутствующими уведомлениями

    Как удалить верхнее и нижнее заполнение UIButton, когда создаете его с помощью автоматического макета?

    Как изменить фон UINavigationBar с изображением на некоторые виды, но не все?

    titleTextAttributes шрифт UIAppearance в iOS 7

    GameplayKit> Редактор графики сценария> Как использовать его для поиска пути?

    Пользовательский ряд в Эврика

    Как разместить UIView в режиме супервизора?

    Аутентификация Firebase + auth0

    iOS-Run / Debug / Install строит через Wi-Fi

    Черный экран появляется случайно после съемки изображения и нажатия «USE» в UIImagePickerController

    Применить условие уровня масштабирования для iOS карт Google

    Загружать файлы из локальной файловой системы на веб-сайт WKWebView из файла: // URL

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