2013-08-06 3 views
0

Я динамически создаю UILabels из массива с использованием цикла for.Как организовать динамически созданные UILabels внутри UIView?

Каждый UILabel имеет разную длину. Когда я создал UILabels, они перекрывают друг друга.

Я хочу разместить эти UILabels внутри UIView без каких-либо перекрытий. Любая помощь?

+0

Вы используете Auto Layout? –

+0

См. [Здесь] (http://stackoverflow.com/questions/11580918/nsblockoperation-or-nsoperation-with-alasset-block-to-display-photo-library-imag/11607592#11607592) и посмотрите на '- (void) loadScrollView'. Вам нужно создать динамическую динамику x, y. Это сделает сетку imageView такой же, как фотогалерею. – TheTiger

+0

@ DanielMartín, Нет, потому что это дает мне проблемы с другими функциями внутри представления. –

ответ

2

Вы можете найти, как это работает здесь: arrange labels sources link

  1. Скачать исходники с помощью соответствующей кнопки на сайте
  2. Открыть группу angeLabels проекта
  3. Открыть ViewController.m файлу
  4. Check - createElements-fitElements методы из источников.

Если вы хотите, вы можете посмотреть здесь источники сразу в вашем браузере: link to code

+1

Спасибо, он прекрасно работал в IOS 7. Но я заменяю CGSize expectedLabelSize = [ул sizeWithFont: label.font constrainedToSize: CGSizeMake (1000, 10) lineBreakMode: этикетки.lineBreakMode]; CGRect rect = [рамка метки]; rect.size.width = expectedLabelSize.width; rect.size.height = expectedLabelSize.height; с sizeToFit из-за устаревания. –

0

Вам нужно изменить координату вашего лейбла как этот

UILabel *hiLbl = [[UILabel alloc] initWithFrame:CGRectMake(0,10,50,20)]; 
hiLbl.text = @"Hi"; 
[self.view addSubview:hiLbl]; 

UILabel *hellolbl = [[UILabel alloc] initWithFrame:CGRectMake(0,30,50,20)]; 
hellolbl.text = @"Hi"; 
[self.view addSubview:hellolbl]; 

или

UILabel *lbl; 

for(int i = 1 ; i < 3 ; i++) 
{ 
    lbl = [[UILabel alloc] initWithFrame:CGRectMake(0,i*10+10,50,20)]; 
    [self.view addSubview:lbl]; 
    lbl.text = i; 
} 
0

Без скриншоте трудно угадать, какой тип перекрывающихся вы имеете в виду. И длина UILabel не помогает, укажите ширину или высоту.

Но если вы говорите о ширине UILabel, то этот кусок кода может вам помочь.

Позволяет вам иметь три метки различной ширины, которые находятся в массиве ширины: {10, 20, 30}.

float width = [array objectAtIndex:0]; 
float x = 0.of; 
float padding = 10.0f; 
for(int i =0; i<3; i++){ 
UILabel *label = [UILabel alloc]initWithFrame:CGRectMake(x, y, width, height)]; 
[self.view addSubview: label]; 
x = x + width + paddng; 
width = [array objectAtIndex:i + 1]; 
} 
2

Вы можете сделать это с помощью sizeToFit и numberOfLines=0

int y=0; 
    for (int k=0; k<[array count]; k++) 
    { 
     UILabel *lb=[[UILabel alloc]initWithFrame:CGRectMake(5 , y, 100,60)]; 

     lb.textAlignment=UITextAlignmentLeft; 
     lb.text=[array objejectAtIndex:k]; 
     lb.numberOfLines=0; 
     [lb sizeToFit]; 
     [self.view addSubview:lb]; 
     y+=lb.frame.size.height; 


    } 
1
Try to implement this logic: 


    -(void)adjustLabel1Text1:(NSString *)text1 
    { 
     UILabel *lbl_first = [UIFont fontWithName:@"Helvetica" size:12]; 



     text1 = [text1 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 


     float hedingLblHeight = [self calculateHeightOfTextFromWidth:text1 : [UIFont fontWithName:@"Helvetica" size:12] :118 :UILineBreakModeWordWrap]; 

     lbl_first.text=text1; 


     [lbl_first setFrame:CGRectMake(lbl_first.frame.origin.x, lbl_first.frame.origin.y, 118, hedingLblHeight)]; 
     lbl_first.lineBreakMode = UILineBreakModeWordWrap; 
     lbl_first.numberOfLines = 0; 
     [lbl_first sizeToFit]; 




    //////////Adjust the lable or any UIControl below this label accordingly. 

     float endResultHeight=[self calculateHeightOfTextFromWidth:text2 : [UIFont fontWithName:@"Helvetica" size:15] :299 :UILineBreakModeWordWrap]; 

     if(hedingLblHeight>secondImgTitleHeight) 
     { 
     [lbl_endResult setFrame:CGRectMake(lbl_endResult.frame.origin.x, lbl_first.frame.origin.y+lbl_first.frame.size.height+5, 299, endResultHeight)]; 
     } 
     else 
     { 
      [lbl_endResult setFrame:CGRectMake(lbl_endResult.frame.origin.x, lbl_first.frame.origin.y+lbl_first.frame.size.height+5, 299, endResultHeight)]; 

     } 

     lbl_endResult.lineBreakMode=UILineBreakModeWordWrap; 
     lbl_endResult.numberOfLines = 0; 
     [lbl_endResult sizeToFit]; 



    } 

    -(float) calculateHeightOfTextFromWidth:(NSString*)text : (UIFont*) withFont:(float)width :(UILineBreakMode)lineBreakMode 
    { 

     CGSize suggestedSize = [text sizeWithFont:withFont constrainedToSize:CGSizeMake(width, FLT_MAX) lineBreakMode:lineBreakMode]; 

     return suggestedSize.height; 
    } 

It has helped me a lot.Hope it works for you. 
Смежные вопросы