ios Динамические этикетки с размерами

Я пытался искать в Интернете, но не нашел четкого ответа на вопрос, поэтому я пришел, чтобы попросить совета экспертов. У меня есть представление с двумя ярлыками на нем. Первая метка используется для обозначения аббревиатуры имени, 2-3 буквы. а вторая метка показывает полное имя.

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

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

Любые советы высоко ценится.

Вы можете рассчитать размер строки, в которой будет отображаться ваша строка, а затем установить фрейм вашего UILabel на этот размер, см. Следующий код в качестве образца –

//Calculate the expected size based on the font and linebreak mode of your label CGSize maximumLabelSize = CGSizeMake(296,9999); CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode]; //adjust the label the the new height. CGRect newFrame = yourLabel.frame; newFrame.size.height = expectedLabelSize.height; yourLabel.frame = newFrame; 

Обновить –

Используйте sizeWithAttributes: вместо этого, который теперь принимает NSDictionary . Передайте пару с ключом UITextAttributeFont и вашим объектом шрифта следующим образом:

 CGSize size = [string sizeWithAttributes: @{NSFontAttributeName: [UIFont systemFontOfSize:17.0f]}]; 

Проверить замену на устаревший размерWithFont: в iOS 7? Больше подробностей

Это также будет делать трюк и будет учитывать приписанный текст

 label.attributedText = attrString; CGSize maximumLabelSize = CGSizeMake(187,CGFLOAT_MAX); CGSize requiredSize = [label sizeThatFits:maximumLabelSize]; CGRect labelFrame = label.frame; labelFrame.size.height = requiredSize.height; label.frame = labelFrame; 

'sizeWithFont:' устарел: сначала устарел в iOS 7.0.

поэтому попробуйте sizeWithAttributes

 - (void)viewDidLoad { [super viewDidLoad]; label = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 300, 20)]; label.backgroundColor = [UIColor blueColor]; const CGFloat fontSize = 30; UIFont *regularFont = [UIFont systemFontOfSize:fontSize]; UIColor *foregroundColor = [UIColor blackColor]; attrs = [NSDictionary dictionaryWithObjectsAndKeys: regularFont, NSFontAttributeName, foregroundColor, NSForegroundColorAttributeName , nil]; NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:@"Test Text" attributes:attrs]; [label setAttributedText:attributedText]; [self.view addSubview:label]; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { CGSize expectedLabelSize = [label.text sizeWithAttributes:attrs]; // iOS 7 Code <-- CGRect newFrame = label.frame; newFrame.size.width = expectedLabelSize.width; label.frame = newFrame; NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:@"Longer Test Text" attributes:attrs]; [label setAttributedText:attributedText]; } 

Поскольку sizeWithFont: устарел в iOS 7 , вам нужно использовать sizeWithAttributes (как объяснил здесь maver). Чтобы упростить код, вы можете добавить метод, который можно повторно использовать следующим образом:

 -(CGRect)rectForText:(NSString *)text usingFont:(UIFont *)font boundedBySize:(CGSize)maxSize { NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:text attributes:@{ NSFontAttributeName:font}]; return [attrString boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin context:nil]; } 

И использовать его

 CGSize maximumLabelSize = CGSizeMake(280,9999); UIFont *font = [UIFont systemFontOfSize:20]; CGRect titleRect = [self rectForText:post.title // <- your text here usingFont:font boundedBySize:maximumLabelSize]; 

Кроме ответа Саурабба. У меня была такая же проблема, и вы должны добавить эту строку
[yourLabel setNumberOfLines:0];
чтобы весь текст отображался в X-строках.

  • Как я могу получить UIPickerview для автоматического обновления UILabel
  • Используя AutoLayout, как я могу сохранить UILabel в том же месте, когда панель навигации исчезнет?
  • Как установить высоту ярлыка для автоматической настройки в Read More / Less with Swift 3?
  • Текст UILabel с несколькими цветами шрифта
  • UILabel появляется в иерархии представления отладки, но не в приложении
  • Создайте UIImage из 2 UIImages и ярлыков
  • UILabel оправдывает влево и вправо
  • UILabel не выполняет мультилинию в пользовательском UITableViewCell при запуске, но после скроллинга
  • Центрирование метки по вертикали в UINavigationBar TitleView
  • Высота NSAttributeString кажется неправильной при использовании как изображения, так и текста
  • Изменить ярлык с другого вида
  • Interesting Posts

    UICollectionView не может прокручивать, чтобы увидеть всю последнюю строку

    Использование оповещений о местоположении на основе iOS

    Как определить пользователя, предоставляющего разрешение на микрофон для iOS?

    Есть ли способ сравнить изображения кнопок в Swift / iOS

    Могу ли я отправить текущее местоположение пользователя на сервер, когда приложение находится в фоновом режиме?

    Обработка событий WKInterfaceButton в WKInterfaceTable

    Загрузка Alamofire из кеша, даже если политика кэша установлена ​​на ReloadIgnoringLocalAndRemoteCacheData

    Приложение iOS: Отсутствует 64-разрядная поддержка

    Как иметь обработчик для повторения UIView animateWithDuration?

    iOS Facebook SDK – дистанционно определить FacebookAppID

    Почему в некоторых торговых точках сделаны сильные ссылки, даже жесткие документы указывают, что выходы должны быть слабыми ссылками

    декодирование строки изображения c – ios base64

    IOS-приложение Bundle ID ошибки и iTunesConnect

    Ограничить карту определенными границами?

    SWIFT Как создать подкласс NSCoding и вызвать его из другого класса?

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