我有以下问题 - 我需要创建两个并排的 UI 标签,如下面的屏幕截图所示 -
包含特价商品文本的 UI 标签是动态的,需要根据包含文本的宽度进行调整,如果可能,还需要显示带有相关填充的倾斜橙色背景 -
我主要是前端开发人员 - 所以使用 CSS 我会使用与标签右侧对齐的长背景图像并相应地填充 - 但我不知道如何在目标 C 中解决这个问题 - 任何人都可以提供任何建议?
我有以下问题 - 我需要创建两个并排的 UI 标签,如下面的屏幕截图所示 -
包含特价商品文本的 UI 标签是动态的,需要根据包含文本的宽度进行调整,如果可能,还需要显示带有相关填充的倾斜橙色背景 -
我主要是前端开发人员 - 所以使用 CSS 我会使用与标签右侧对齐的长背景图像并相应地填充 - 但我不知道如何在目标 C 中解决这个问题 - 任何人都可以提供任何建议?
这不是一个插入式解决方案,但可能会帮助您找到它(假设您不使用自动布局):
UIImageView
作为背景和一个UILabel
文本[UIImage resizableImageWithCapInsets:resizingMode:]
)[label sizeToFit]
以调整标签大小以完全适合包含的文本imageView.frame = CGRectInset(label.frame, -10, -10)
,这将使您的图像视图在所有方面都比标签大 10pt)。使用自动布局,您只需定义标签和图像视图之间的适当约束并依赖标签的“内在内容大小” - 应该很容易。
当标签太长时,您总是可以缩小文本,进入视图控制器,单击文本太长时要缩小的标签,然后在属性检查器中的标签下转到自动收缩. 将其从固定字体大小更改为最小字体大小,然后我建议将 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);
}
我希望这可以帮助你
CGFloat rect = [YOURSTRING
boundingRectWithSize: (CGSize){ labelWidth, CGFLOAT_MAX }
options: NSStringDrawingUsesLineFragmentOrigin
attributes: @{ NSFontAttributeName : labelFont };
context: nil];
这假设 numberOfLines = 0。
您要使用的UILabel -sizeToFit
继承自UIView
. 你应该能够从那里找出其余的。
查找包含文本的大小
[text sizeWithFont:font constrainedToSize:CGSizeMake(width, height) lineBreakMode:NSLineBreakModexx]
一旦你有了它,你就可以相应地操纵标签的大小。
希望这可以帮助
对于背景,我将创建一个覆盖 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/
蒂姆