使UILabel看起来像CSS显示:内联

时间:2011-08-20 22:17:06

标签: ios background uilabel

好的,这是我的问题。我有一组相当大的UIButtons,它们将UIImage设置为背景。现在我想在这些按钮中添加标签。但我目前正在实施的设计使用“花式”标签,标签的背景颜色是半透明的,并在文本周围折叠。

我的第一个想法是使用UIWebview来实现这一点并且它可以正常工作,但添加大量UIWebview需要很长时间才能显示标签。

下一个解决方案是使用UILabel,性能会更好。但对于我的生活,我无法弄清楚,如何使视觉风格与设计相匹配。

所以基本上我想让UILabel表现得像一个HTML元素,显示CSS规则:inline;风格定义。

这是否可以使用UILabel的内置参数?如果没有,我可能会使用UIWebView解决方案,但使用UILabel当然会更加轻松。

这是一个截图,应该可以解释一下

Top是默认UILabel的行为方式,而底部是我希望它采取行动的方式。

3 个答案:

答案 0 :(得分:1)

你还没有完全描述你的文字所具有的风格,但听起来你想要一种“发光”效果。这可以使用QuartzCore在标签上进行阴影效果。请注意,单个阴影通常不会这样做,因此这里有一个带有四个标签和四个阴影的示例:

for (int i = 0; i < 4; i++) {
    UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 280, 30)];
    [label setBackgroundColor:[UIColor clearColor]];
    [label setTextColor:[UIColor colorWithRed:1 green:1 blue:1 alpha:1]];
    [label setText:@"This is some glowing text"];
    [[label layer] setShadowColor:[[UIColor colorWithRed:1 green:1 blue:1 alpha:1] CGColor]];
    CGSize shadowOff = CGSizeMake(0, 0);
    if (i == 0) shadowOff = CGSizeMake(3, 3);
    else if (i == 1) shadowOff = CGSizeMake(3, -3);
    else if (i == 2) shadowOff = CGSizeMake(-3, -3);
    else if (i == 3) shadowOff = CGSizeMake(-3, 3);
    [[label layer] setShadowOffset:shadowOff];
    [[label layer] setShadowOpacity:0.5];
    [[label layer] setShadowRadius:3];
    [[label layer] setMasksToBounds:NO];
    [self.view addSubview:[label autorelease]];
}

显然,可以针对不同级别的“发光”修改阴影不透明度,半径等。

答案 1 :(得分:0)

据我所知,你需要弄清楚两件事:

  1. 要在UILabel中使用的文本的渲染大小。这可以用-[NSString sizeWithFont:]来计算。还有很多其他相关的方法。参见NSString UIKit Additions Reference。

  2. 你需要的第二件事是你的UILabel的背景颜色应该在文本周围完美地折叠。为此,您需要将可伸缩图像设置为UILabel的背景。见-[UIImage stretchableImageWithLeftCapWidth:topCapHeight:]。有关可伸展图像如何工作的示例,请参阅http://idevrecipes.com/2010/12/08/stretchable-images-and-buttons/

答案 2 :(得分:0)

我设法找到几乎按预期工作的解决方案。它不会在所有单行周围折叠,但它会折叠文本周围的框,这对我来说已经足够了。

这是为我提供技巧的最终代码:

UILabel *buttonTitle = [[UILabel alloc] initWithFrame:CGRectMake(4, 4, 176, 120)];
buttonTitle.text = @"Button text";
buttonTitle.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.65];
buttonTitle.textColor = [UIColor whiteColor];
buttonTitle.textAlignment = UITextAlignmentLeft;
buttonTitle.numberOfLines = 0;
buttonTitle.lineBreakMode = UILineBreakModeWordWrap;
buttonTitle.adjustsFontSizeToFitWidth = NO;
[buttonTitle sizeToFit];