我有以下问题 - 我需要创建沿着侧彼此两个UI标签如下面的屏幕截图 -拉伸宽度
的包含特殊优惠文本的UI标签是动态的,需要根据包含文本的宽度进行调整,并且如果可能,还会显示倾斜的橙色背景以及相关填充 - 我主要是前端开发人员 - 因此与CSS我会使用一个很长的背景图片,它与la的右边对齐贝尔和相应的垫 - 但我不知道如何在客观的C - 如果任何人都可以提供任何建议吗?
我有以下问题 - 我需要创建沿着侧彼此两个UI标签如下面的屏幕截图 -拉伸宽度
的包含特殊优惠文本的UI标签是动态的,需要根据包含文本的宽度进行调整,并且如果可能,还会显示倾斜的橙色背景以及相关填充 - 我主要是前端开发人员 - 因此与CSS我会使用一个很长的背景图片,它与la的右边对齐贝尔和相应的垫 - 但我不知道如何在客观的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);
}
你想使用的是UILabel -sizeToFit
继承从UIView
。你应该能够从那里弄清楚其余的。
查找包含文本的大小与
[text sizeWithFont:font constrainedToSize:CGSizeMake(width, height) lineBreakMode:NSLineBreakModexx]
一旦你有,你可以相应地操纵标签的大小。
希望这有助于
对于后台我想创建的UILabel的一个子类覆盖drawInRect:,像这样的例子,简单地绘制一个矩形与标签的大小
-(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/
添
我希望这能帮助你
CGFloat rect = [YOURSTRING
boundingRectWithSize: (CGSize){ labelWidth, CGFLOAT_MAX }
options: NSStringDrawingUsesLineFragmentOrigin
attributes: @{ NSFontAttributeName : labelFont };
context: nil];
这是假设numberOfLines = 0
的问题是关于正确大小的背景图像,而比自动调整标签的字体大小适合。 –
@DanielRinser我知道。我会看看我能否在网上找到其他的东西。只是想你想知道,因为在我发布这个时候你没有其他答案。不过,你总是可以得到字符串的长度,然后根据它来操作橙色框。看看我的更新的答案,如何做到这一点 – Jojodmo
首先,我想你误解了我不是那个问这个问题的人;;)关于你的答案:不,不,几乎所有的字体都有一个变量char宽度(简单地说:“m”大于“i”)。所以,简单地使用字符串长度(==字符数)来计算它的渲染大小并不好。有关计算呈现字符串大小的方法,请参阅其他答案。 –