【问题标题】:How to arrange dynamically created UILabels inside UIView? [closed]如何在 UIView 中安排动态创建的 UILabel? [关闭]
【发布时间】:2013-08-06 09:54:24
【问题描述】:

我正在使用for 循环从数组动态创建UILabels

每个UILabel 都有不同的长度。当我创建 UILabels 时,它们相互重叠。

我想将那些UILabels 正确地安排在UIView 内,没有任何重叠。有什么帮助吗?

【问题讨论】:

  • 你在使用自动布局吗?
  • 查看here 并查看-(void)loadScrollView 方法。您需要使 x,y 原点动态化。它将使 imageView 网格与照片库相同。
  • @DanielMartín,不,因为它给我视图中的其他功能带来了问题。
  • @IOS7beta2 我的回答对你有用吗?
  • @IOS7beta2 请检查源代码它 100% 有效。如果您有任何问题,尽管问我。

标签: ios uiview uilabel


【解决方案1】:

你可以在这里找到它的工作原理:arrange labels sources link

  1. 使用网站上的相应按钮下载源代码
  2. 打开 ArrangeLabels 项目
  3. 打开ViewController.m文件
  4. 检查源中的 -createElements-fitElements 方法。

如果您愿意,可以立即在浏览器中查看源代码:link to code

【讨论】:

  • 谢谢,它在 IOS 7 中完美运行。但我替换了 CGSize expectedLabelSize = [str sizeWithFont:label.font constrainedToSize:CGSizeMake(1000, 10) lineBreakMode:label.lineBreakMode]; CGRect rect = [标签框]; rect.size.width = expectedLabelSize.width; rect.size.height = expectedLabelSize.height;由于不推荐使用 sizeToFit。
【解决方案2】:

您可以使用sizeToFitnumberOfLines=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;


    }

【讨论】:

    【解决方案3】:
      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.
    

    【讨论】:

      【解决方案4】:

      您需要像这样更改标签的 y 坐标

      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;
      }
      

      【讨论】:

        【解决方案5】:

        没有任何屏幕截图,很难猜出您指的是哪种类型的重叠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];
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-01
          • 2013-11-10
          • 2012-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-11
          • 1970-01-01
          相关资源
          最近更新 更多