Попытка сделать что-то довольно простое. Я создаю ряд прямоугольников, которые помещаются в горизонтальную прокрутку UIScrollView
. Прямоугольники располагаются идеально. Однако каждый прямоугольник имеет на нем UILabel
. Отображается только первая метка. Ни у кого из них нет. Красные прямоугольники здесь являются основными CGRect
s. Желтый для меня, чтобы отладить, правильно ли рисуется метка. Как вы можете легко увидеть, отображается только первая метка:Невозможно заставить UILabels появляться на UIViews, созданных динамически
self.dayButtonsArray = [[NSMutableArray alloc] initWithCapacity:21];
CGFloat buttonSpacing = 2.0f;
CGFloat buttonWidth = 50.0f;
CGFloat buttonHeight = self.contentView.frame.size.height;
CGFloat startX = self.contentView.frame.origin.x;
CGFloat thisX = startX;
for (int i=0; i<21; i++) {
CGRect frame = CGRectMake(thisX, self.contentView.frame.origin.y, buttonWidth, buttonHeight);
UIView *thisButton = [[UIView alloc] initWithFrame:frame];
// set up a label for each view
UILabel *label = [[UILabel alloc] initWithFrame:frame];
[label setTextColor:[UIColor blackColor]];
label.font = [UIFont fontWithName:DEFAULT_FONT size:14];
label.textAlignment = NSTextAlignmentCenter;
[label setText:[NSString stringWithFormat:@"DAY %d", i+1]];
[labelsArray addObject:label];
[thisButton setBackgroundColor:[UIColor redColor]];
// now add these elements
[thisButton addSubview:label];
[thisButton bringSubviewToFront:label];
[self.contentView addSubview:thisButton];
[self.contentView bringSubviewToFront:thisButton];
[self.dayButtonsArray addObject:thisButton];
CGRect contentSize = self.contentView.frame;
contentSize.size.width = ((i+1) * buttonWidth) + (i * buttonSpacing);
self.contentView.frame = contentSize;
thisX += buttonWidth + buttonSpacing;
}
Я думаю, что вы можете установить 'contentSize.size.width' один раз - после цикла, а не устанавливать его на каждой итерации. – dasblinkenlight
Согласовано, за исключением того, что значение int является локальным для цикла. Простое решение, в любом случае. – Alex