Динамическое размещение меток и кнопок в UIView - PullRequest
0 голосов
/ 08 декабря 2011

Я хочу знать, существует ли динамический способ заполнения UIView.

Например, рассмотрим, что у меня есть пара UILabels, выровненных в виде строк, текст которых снова является динамическим.

Если текст для первого UILabel состоит из нескольких строк, я знаю, что могу позвонить

[myLabel sizeToFit];

, чтобы изменить свой размероснованный на его содержании.

Существует ли простой способ распространения этой информации среди всех подпредставлений (в моем случае UILabels) UIView и их создания и соответствующей перераспределения.

Надеюсь, я достаточно ясен.

1 Ответ

1 голос
/ 08 декабря 2011

Для двух меток, которые должны быть выровнены как строки, вы можете использовать функцию CGRectGetMaxY.Например:

UILabel *first = [[UILabel alloc] initWithFrame:CGRectMake(10.0f,20.0f, 100.0f, 200.0f)];
[first setText:@"Text to display"];
[first sizeToFit];
[self.view addSubview:first];
[first release];

UILabel *second = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, CGRectGetMaxY(first.frame), 100.0f, 200.0f];
[second setText:@"Text to display"];
[second sizeToFit];
[self.view addSubview:second];
[second release];

UILabel *third = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, CGRectGetMaxY(second.frame), 100.0f, 200.0f];
[third setText:@"Text to display"];
etc...

Вы также можете узнать ожидаемый размер метки в соответствии с ее текстовым параметром, выполнив это:

NSString *text = @"Text to display";
CGSize size = [text sizeWithFont:[UIFont fontWithName:@"HelveticaNeue" size:10.0f] constrainedToSize:CGSizeMake(100.0f, FLT_MAX) lineBreakMode:UILineBreakModeTailTruncation];
UILabel *first = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 20.0f, 100.0f, size.height)];
[first setText:text];
...