3

我有以下问题 - 我需要创建两个并排的 UI 标签,如下面的屏幕截图所示 -

在此处输入图像描述

包含特价商品文本的 UI 标签是动态的,需要根据包含文本的宽度进行调整,如果可能,还需要显示带有相关填充的倾斜橙色背景 -

我主要是前端开发人员 - 所以使用 CSS 我会使用与标签右侧对齐的长背景图像并相应地填充 - 但我不知道如何在目标 C 中解决这个问题 - 任何人都可以提供任何建议?

4

6 回答 6

4

这不是一个插入式解决方案,但可能会帮助您找到它(假设您不使用自动布局):

  • 你需要一个UIImageView作为背景和一个UILabel文本
  • 使用可平铺/可拉伸的图像(可能带有帽子插图)作为背景(请参阅[UIImage resizableImageWithCapInsets:resizingMode:]
  • 在标签上设置文本
  • 调用[label sizeToFit]以调整标签大小以完全适合包含的文本
  • 根据标签的大小调整图像视图的大小(例如imageView.frame = CGRectInset(label.frame, -10, -10),这将使您的图像视图在所有方面都比标签大 10pt)。

使用自动布局,您只需定义标签和图像视图之间的适当约束并依赖标签的“内在内容大小” - 应该很容易。

于 2013-10-18T15:42:04.357 回答
1

当标签太长时,您总是可以缩小文本,进入视图控制器,单击文本太长时要缩小的标签,然后在属性检查器中的标签下转到自动收缩. 将其从固定字体大小更改为最小字体大小,然后我建议将 6 到 8 作为最小字体大小。不过,这将是最低的字体大小,所以如果 XCode 可以在使字体大小为 9 的同时使标签适合,但最低的是 7,它会做到这一点。

或者,你可以得到字符串的长度

int *stringLength = [myString length]

这也算空格,然后,用

orangeBoxImageView.frame = CGRectMake(0, 0, resizedWidth, resizedHeight);

所以你可以用你的代码做这样的事情:

if(stringLength == 15{
    orangeBoxImageView.frame = CGRectMake(0, 0, 15, 5);
}
于 2013-10-18T14:25:54.903 回答
1

我希望这可以帮助你

CGFloat rect = [YOURSTRING
    boundingRectWithSize: (CGSize){ labelWidth, CGFLOAT_MAX }
    options: NSStringDrawingUsesLineFragmentOrigin
    attributes: @{ NSFontAttributeName : labelFont };
    context: nil];

这假设 numberOfLines = 0。

于 2014-06-23T11:47:04.097 回答
0

您要使用的UILabel -sizeToFit继承自UIView. 你应该能够从那里找出其余的。

于 2013-10-18T14:50:00.517 回答
0

查找包含文本的大小

[text sizeWithFont:font constrainedToSize:CGSizeMake(width, height) lineBreakMode:NSLineBreakModexx]

一旦你有了它,你就可以相应地操纵标签的大小。

希望这可以帮助

于 2013-10-18T15:03:24.440 回答
0

对于背景,我将创建一个覆盖 drawInRect: 的 UILabel 的子类,例如这个简单地绘制一个具有标签大小的矩形的示例

-(void) drawRect:(CGRect)rect {  

    [super drawRect:rect];  
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(c, [UIColor redColor].CGColor);
    CGContextFillRect(context, rect);
}

您应该创建一条具有所需形状的路径并填充它,而不是绘制一个矩形。请参阅此处了解更多信息:

http://weblog.invasivecode.com/core-graphics

我不知道您是如何创建标签的,但如果使用自动布局正确完成,它将自动具有正确的宽度。看这里:

http://www.raywenderlich.com/20881/

蒂姆

于 2013-10-18T15:56:25.383 回答