2013-10-18 162 views
2

我有以下问题 - 我需要创建沿着侧彼此两个UI标签如下面的屏幕截图 -拉伸宽度

enter image description here

的包含特殊优惠文本的UI标签是动态的,需要根据包含文本的宽度进行调整,并且如果可能,还会显示倾斜的橙色背景以及相关填充 - 我主要是前端开发人员 - 因此与CSS我会使用一个很长的背景图片,它与la的右边对齐贝尔和相应的垫 - 但我不知道如何在客观的C - 如果任何人都可以提供任何建议吗?

回答

3

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

  • 你需要一个UIImageView为背景和文本
  • 使用平铺/ strechable图像(可能与帽插图)为背景UILabel(见[UIImage resizableImageWithCapInsets:resizingMode:]
  • 设置标签上的文字
  • 致电[label sizeToFit]将标签的大小调整为与所包含的文字完全相符
  • 根据标签的大小调整图像视图的大小(例如, imageView.frame = CGRectInset(label.frame, -10, -10),这将使你的图像视图10PT比四面标签)放大。

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

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); 
} 
+0

的问题是关于正确大小的背景图像,而比自动调整标签的字体大小适合。 –

+0

@DanielRinser我知道。我会看看我能否在网上找到其他的东西。只是想你想知道,因为在我发布这个时候你没有其他答案。不过,你总是可以得到字符串的长度,然后根据它来操作橙色框。看看我的更新的答案,如何做到这一点 – Jojodmo

+0

首先,我想你误解了我不是那个问这个问题的人;;)关于你的答案:不,不,几乎所有的字体都有一个变量char宽度(简单地说:“m”大于“i”)。所以,简单地使用字符串长度(==字符数)来计算它的渲染大小并不好。有关计算呈现字符串大小的方法,请参阅其他答案。 –

0

你想使用的是UILabel -sizeToFit继承从UIView。你应该能够从那里弄清楚其余的。

0

查找包含文本的大小与

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

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

希望这有助于

0

对于后台我想创建的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/

1

我希望这能帮助你

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

这是假设numberOfLines = 0