Пользовательская метка iOS не может изменить размер текста

#ios #objective-c #uilabel #autoresize

#iOS #objective-c #uilabel #авторазмер

Вопрос:

Я хотел бы реализовать ULLabelExtended для автоматического изменения размера текста UILabel в соответствии с шириной устройства. но когда дело доходит до выполнения; он показывает изображение в качестве результата вместо отображения полного предложения:

Полное предложение: Ze aangeplant cocos rond hun nieuwe home.

Существуют ли какие-либо другие альтернативы для получения связи или функций, чтобы размер текста метки был пропорционален ширине устройства?

Ниже приведен мой код

Приложение:

  CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenWidth = screenRect.size.width;
    CGFloat screenHeight = screenRect.size.height;

    [self.labelLong setWidthOfLabelWithMaxWidth:screenWidth];
    [self.labelShort setWidthOfLabelWithMaxWidth:screenWidth];
  

Источник:

 #import "UILabelExtended.h"



@implementation UILabelExtended
@synthesize selector,customDelegate, objectInfo;

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    if(self.selector)
        if([self.customDelegate respondsToSelector:self.selector]) {
            [self.customDelegate performSelector:self.selector withObject:self];
            return;
        }
}

- (void)dealloc {

    self.customDelegate = nil;
    self.selector = NULL;
    self.objectInfo = nil;
}
@end


@implementation UILabel(UILabelCategory)

- (void)setHeightOfLabel {
    UILabel* label = self;

    //get the height of label content
    CGFloat height = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, 99999) lineBreakMode:NSLineBreakByWordWrapping].height;
    //set the frame according to calculated height
    CGRect frame = label.frame;
    if([label.text length] > 0) {

        frame.size.height = height;
    }
    else {
        frame.size.height = 0;
    }
    label.frame = frame;
}


- (void)setWidthOfLabel {
    UILabel* label = self;

    //get the height of label content
    CGFloat width = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(99999, label.bounds.size.height) lineBreakMode:NSLineBreakByWordWrapping].width;
    //set the frame according to calculated height
    CGRect frame = label.frame;
    if([label.text length] > 0) {

        frame.size.width = width 5;
    }
    else {
        frame.size.width = 0;
    }
    label.frame = frame;
}

- (void)setHeightOfLabelWithMaxHeight:(float)maxHeight {
    UILabel* label = self;

    //get the height of label content
    CGFloat height = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, maxHeight) lineBreakMode:NSLineBreakByWordWrapping].height;
    //set the frame according to calculated height
    CGRect frame = label.frame;

    if([label.text length] > 0) {
        if (height > maxHeight) {
            frame.size.height = maxHeight;
        }
        else {
            frame.size.height = height;
        }

    }
    else {
        frame.size.height = 0;
    }
    label.frame = frame;
}

- (void)setWidthOfLabelWithMaxWidth:(float)maxWidth  {
    UILabel* label = self;

    //get the height of label content
    CGFloat width = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(99999, label.bounds.size.height) lineBreakMode:NSLineBreakByWordWrapping].width;
    //set the frame according to calculated height
    CGRect frame = label.frame;
    if([label.text length] > 0) {

        if (width > maxWidth) {
            frame.size.width = maxWidth;
        }
        else {
            frame.size.width = width;
        }
    }
    else {
        frame.size.width = 0;
    }
    label.frame = frame;
}
@end
  

Комментарии:

1. Вы пробовали Autoshrink использовать собственность Attribute inspector ?

2. Я не уверен, что полностью понимаю, о чем вы спрашиваете, как насчет метода sizeToFit в UIView?

3. Я использовал размер по размеру, но метка не может отображать весь текст в одной строке

4. Вы пробовали это, установив для свойства numberOfLines значение Ноль .. ?

5. На самом деле мне нужна только одна строка для отображения. Из-за спецификации дизайна учитывается только изменение размера шрифта