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

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

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

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

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

5 Solutions collect form web for “ios Динамические этикетки с размерами”

Вы можете рассчитать размер строки, в которой будет отображаться ваша строка, а затем установить фрейм вашего 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-строках.

  • Как установить выравнивание по левому краю для UILabel для приложения iOS?
  • AttributedString в UINavigationBar не показывает обе строки текста
  • Цель c - Отступ текста
  • Как я могу погладить и заполнить NSAttributedString w / UILabel
  • Цвет текста текстовой метки UITableViewCell
  • Можно ли использовать NSBaselineOffsetAttributeName с TTTAttributedLabel?
  • Как вычислить ширину UILabel на основе длины текста?
  • Swift: почему label.text необязательный, но textView.text - это развернутая строка?
  • Межстрочный интервал между iOS 5/6 и iOS 7
  • UIStackView и усеченные многострочные UILabels
  • как установить вертикальную позицию текста CATextLayer?
  • Interesting Posts

    Публикация RTMP-потока в Red5 Server формы iOS-камеры

    Использование двух версий зависимости Cocoapod

    Откройте список SMS-сообщений на iOS

    Сцена SCNRender с анимированными объектами

    Приложение замерзает после попытки использовать камеру в iOS-симуляторе даже с обработкой catch

    Google API JS API v3 не работает в iOS

    Что вызвано после запуска UIApplicationDidBecomeActiveNotification?

    Предоставляет ли Facebook iOS SDK пользователю аутентификацию каждый раз, когда они используют приложение?

    @IBDesignable UIButton Extension

    CUICatalog: Недопустимое имя актива: или неверный масштабный коэффициент: 2.000000

    Как проверить, находится ли сейчас дата в течение 9: 00-18: 00

    Совместное использование стека основных данных и данных между приложениями и расширениями в iOS8

    NSLayoutConstraint и MKMapView

    Понимание глубины удержания

    Переопределить UINavigationController UINavigationTransitionView clipToBounds

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.