【问题标题】:Adding additional space to UILabel to insert image向 UILabel 添加额外空间以插入图像
【发布时间】:2013-03-19 14:56:40
【问题描述】:

在 UILabel 的文本末尾添加图像时遇到问题。如何检测标签中文本的大小,然后添加额外的空间并将图像插入其中?

【问题讨论】:

    标签: ios objective-c xcode uilabel


    【解决方案1】:

    我为此写了一点代码:

    -(void) labelSizeGetter
    {
        UILabel * mylabel=[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    
        float heigth=25.0;//max height value of label.
    
        NSString *yourString = @"My great text";
    
        mylabel.font =[UIFont fontWithName:@"Helvetica-Bold" size:12];
    
        [mylabel setText:yourString];
    
        CGSize s = [mylabel.text sizeWithFont:[UIFont systemFontOfSize:12] 
                            constrainedToSize:CGSizeMake(MAXFLOAT,heigth)
                                lineBreakMode:NSLineBreakByWordWrapping];
    
        // s is a size for text of label. just add 10 pix to width to make it more beautiful.
    
        NSLog(@"%@", NSStringFromCGSize(s));
    
        mylabel.frame=CGRectMake(0, 0, s.width+10, s.height);
    
        [self.view addSubview:mylabel];
    
        UIView * myimage=[[UIView alloc] initWithFrame:CGRectMake(mylabel.frame.origin.x+mylabel.frame.size.width , mylabel.frame.origin.y, 30, 30)];//create your images frame according to frame of your label
    
        myimage.backgroundColor =[UIColor colorWithPatternImage:[UIImage imageNamed:@"arti.png"]];
    
        [self.view addSubview:myimage];
    
    }
    

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      最好的办法是拿一个UIView

      并在此 UIView 上添加 UILabelUIImageView根据您的要求提供 Fram)。

      这个UIView 到您的UIViewControllerMainView

      【讨论】:

      • 我想过这个,但在目前的情况下我不能使用它。我需要有额外的空间而不添加 UIView。
      【解决方案3】:

      如果你不想使用 UIView。为什么不检查标签中字符串的长度。然后使用框架为您的图像添加一些额外的空间。 [UILabel.text length] 返回长度。

      【讨论】:

        【解决方案4】:
        1. 如果需要或只使用超级视图,请创建一些容器 UIView
        2. 放在那里UILabelUIImageView
        3. 使用[NSString sizeWithFont:] 或类似的sizeWith... 方法计算文本的大小
        4. 根据文字大小计算UIImageView的位置

        【讨论】:

          【解决方案5】:

          这是一个代码 sn-p,它为您提供针对特定字体和特定字体大小的大小调整。因此,您可以为标签设置框架,然后也可以设置图像视图。

          - (CGSize)getSizeFromText:(NSString*)text {
          
              CGSize constrainedSize;
          
              constrainedSize.width = give maximum allowable width limit;
          
              constrainedSize.height = MAXFLOAT;
          
              CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:constrainedSize lineBreakMode: UILineBreakModeWordWrap];
          
              return size;
          }
          

          希望这能帮助您解决问题。

          【讨论】:

            【解决方案6】:

            NSString 上有一个类别,它在使用给定字体呈现时返回字符串的大小。有几种方法,最完整的是- (CGSize)sizeWithFont:(UIFont *)font minFontSize:(CGFloat)minFontSize actualFontSize:(CGFloat *)actualFontSize forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode(参见Apple Docs)。

            有了这些信息,你或许可以实现你想做的事情。

            【讨论】: