Nano Hash - криптовалюты, майнинг, программирование

Действительно закрыть строки с помощью NSAttributedString?

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

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"50 WPM"];

NSMutableParagraphStyle *paragrapStyle = [[NSMutableParagraphStyle alloc] init];
paragrapStyle.alignment = NSTextAlignmentCenter;
paragrapStyle.lineSpacing = -10;

[string addAttribute:NSParagraphStyleAttributeName value:paragrapStyle range:NSMakeRange(0, string.length)];

UIFont *font1 = [UIFont systemFontOfSize:22.0];
[string addAttribute:NSFontAttributeName value:font1 range:NSMakeRange(0, string.length - 4)];

UIFont *font = [UIFont systemFontOfSize:15.0];
[string addAttribute:NSFontAttributeName value:font range:NSMakeRange(string.length - 3, 3)];

[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(0, string.length)];

[self.button setAttributedTitle:string forState:UIControlStateNormal];

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

введите здесь описание изображения

Есть ли способ приблизить их?


  • Пробовали ли вы настраивать свойства paragraphSpacing и paragraphSpacingBefore стиля абзаца? 26.10.2013
  • Я попытался под paragraphStyle.lineSpacing = -10; установить эти атрибуты на paragrapStyle в 0 (а также послесловие -10), и ни один из них не дал заметного эффекта. 27.10.2013
  • @DougSmith, вы используете отрицательное значение для межстрочного интервала в соответствии с документом Apple. Попробуйте что-то вроде (0.0000001). 31.10.2013

Ответы:


1

Хорошо, если у вас есть строка атрибута, тогда все должно быть возможно. :) Вы просто должны искать больше.

- (void)setMinimumLineHeight:(CGFloat)aFloat
- (void)setMaximumLineHeight:(CGFloat)aFloat

Пытаться

[paragraphStyle setLineSpacing:0.0f];
[paragraphStyle setMaximumLineHeight:7.0f];

Вы поймете, что maxLineHeight не является maxLineSpacing. ^^

Это, например, с setMaximumLineHeight:12];

введите здесь описание изображения

31.10.2013
  • Моя проблема в том, что текст обрезается. 31.10.2013
  • Что, если вы отключите masksToBounds или добавите корректировку базовой линии или преобразование перевода? 02.11.2013

  • 2

    Вот небольшое расширение в Swift3, которое поддерживает отрицательный межстрочный интервал.

    extension UILabel {
        func set(lineSpacing: CGFloat, textAlignment: NSTextAlignment = NSTextAlignment.center) {
            if let text = self.text {
                let paragraphStyle = NSMutableParagraphStyle()
                if lineSpacing < 0 {
                    paragraphStyle.lineSpacing = 0
                    paragraphStyle.maximumLineHeight = self.font.pointSize + lineSpacing
                } else {
                    paragraphStyle.lineSpacing = lineSpacing
                }
                let attrString = NSMutableAttributedString(string: text)
                attrString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
                self.attributedText = attrString
                self.textAlignment = textAlignment
            }
        }
    }
    
    27.10.2017
  • Блестящий. Спасибо. 01.05.2020

  • 3

    Я бы посоветовал прочитать TextKit. который был представлен в iOS7. У меня нет большого опыта в этом, но я знаю, что это дает вам много возможностей, когда дело доходит до атрибуции ваших текстов.

    24.10.2013
  • К сожалению, для чего-то простого, подобного этому, очень не хватает учебных пособий по TextKit. Я чувствую себя потерянным в море сложности. 24.10.2013
  • К сожалению, это правда. Рэй Вендерлих делает потрясающие уроки, возможно, вы могли бы попробовать его! raywenderlich.com/50151/text-kit-tutorial 24.10.2013

  • 4

    В Swift 3 вы можете добиться этого:

    let paragraph = NSMutableParagraphStyle()
    paragraph.lineSpacing = 0
    paragraph.maximumLineHeight = 20.
    

    Сохраняйте значение lineSpacing = 0. Вы можете настроить максимальную высоту линии, чтобы сделать ее ближе или увеличить интервал.

    22.08.2017

    5

    Как насчет подкласса UIButton и добавления 2 UILabels к кнопкам, которые расположены близко друг к другу. Создайте свойства для меток и установите их соответствующим образом:

    CustomButton *btn = [CustomButton new];
    
    btn.textLine1 = @"Top";
    btn.textLine2 = @"Bottom";
    

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

    31.10.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..