Правильный способ использования sizeThatFits: и sizeToFit с UILabel? - PullRequest
3 голосов
/ 26 октября 2010

В настоящее время у меня есть метка, которая корректно измеряется с использованием [aString sizeWithFont: constrainedToSize: lineBreakMode:], но я ввел вращение в мое устройство и с гибкой шириной и высотой это приводит к тому, что моя UILabel расширяет ширину (потому устанавливается относительно основного вида), но не сжимается по высоте, чтобы компенсировать дополнительное пространство.

В другом вопросе, который я задал, мне сказали использовать sizeToFit и / или sizeThatFits:, однако я не могу найти в Интернете никакого полезного ресурса, который рассказывал бы мне, как использовать это должным образом, и испытания, которые я провел, привели к иррациональное поведение.

В двух словах, скажем, у меня есть такая структура:

UIView *innerView = [[UIView alloc] initWithFrame:CGRectMake(10, 10, self.view.frame.size.width-20, 0)];
[innerView setAutoresizingMask:*flexible width and height*]
[innerView setBackgroundColor:[UIColor redColor]];
[self.view addSubview:innerView];

UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, innerView.frame.size.width-20, 0)];
[myLabel setAutoresizingMask:*flexible width and height*]
[myLabel setBackgroundColor:[UIColor blueColor]];
[myLabel setNumberOfLines:0];
[myLabel setLineBreakMode:UILineBreakModeWordWrap];
[innerView addSubview:myLabel];

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

По сути, у меня есть эти два элемента. Теперь при вращении они будут растягиваться, чтобы соответствовать новому размеру представления. Что мне нужно, это способ увеличить или уменьшить высоту для динамического размещения содержимого. [aString sizeWithFont...] только статический. Итак, как бы я использовал sizeToFit или sizeThatFits, чтобы сделать это динамическим?

Спасибо.

Tom

1 Ответ

2 голосов
/ 21 января 2011

Вы пытались сбросить рамку своих ярлыков после поворота экрана?Проверьте значение interfaceOrientation in:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

Затем установите рамку метки соответственно для каждого режима просмотра внутри didRotateFromInterfaceOrientation .

Вотпример изменения размера рамки метки для длины строки: http://cocoamatic.blogspot.com/2010/08/uilabel-dynamic-sizing-based-on-string.html

...