почему в этом коде требуется вызов sizeToFit?

Любой, кто может указать, почему строка «[aLabel sizeToFit]» требуется в приведенном ниже коде, взятом из здесь.

То есть созданный CGRect уже имеет размер, основанный на размере шрифта текста, так зачем же требуется sizeToFit? Или это потому, что, пока они рассчитывали правильный размер CGRect, они еще не установили заранее согласованный шрифт (системный шрифт) в UILabel? (и поэтому эффективно называется sizeToFit вместо установки шрифта)

- (CGRect)RAD_frameForCellLabelWithSystemFontOfSize:(CGFloat)size {
    CGFloat width = [UIScreen mainScreen].bounds.size.width - 50;
    CGFloat height = [self RAD_textHeightForSystemFontOfSize:size] + 10.0;
    return CGRectMake(10.0f, 10.0f, width, height);
}

- (void)RAD_resizeLabel:(UILabel *)aLabel WithSystemFontOfSize:(CGFloat)size {
    aLabel.frame = [self RAD_frameForCellLabelWithSystemFontOfSize:size];
    aLabel.text = self;
    [aLabel sizeToFit];    // WHY IS THIS REQUIRED
}

person Greg    schedule 10.03.2011    source источник


Ответы (1)


Из документов:

Вызовите этот метод, если вы хотите изменить размер текущего представления, чтобы оно использовало наиболее подходящий объем пространства. Конкретные представления UIKit изменяют свой размер в соответствии со своими внутренними потребностями. В некоторых случаях, если представление не имеет суперпредставления, его размер может соответствовать границам экрана. Таким образом, если вы хотите, чтобы данное представление соответствовало своему родительскому представлению, вы должны добавить его в родительское представление перед вызовом этого метода.

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

person Max    schedule 10.03.2011
comment
но не правда ли, что выделение CGRect (которое имеет определенный размер) фактически устанавливает размер UILabel (и я понимаю, что UILabel на самом деле является представлением)? Или я что-то здесь упускаю? - person Greg; 10.03.2011
comment
Да UILabel является подклассом UIView. Забыл добавить это из документов: изменяет размер и перемещает представление приемника, поэтому оно просто заключает в себе свои подпредставления. Итак, если у этого ярлыка есть подвиды, то это ответ. Однако вы можете определить это наверняка: закомментируйте эту строку и посмотрите, что произойдет:) - person Max; 10.03.2011
comment
хорошо - на данный момент я думаю, что вы говорите, что это может не быть необходимым в этом коде (т.е. может ничего не делать)? - person Greg; 10.03.2011
comment
на самом деле я не знаю (потому что это зависит от приложения). Я просто перечислил все возможные причины. - person Max; 10.03.2011