模糊的UILabel作为UITableViewCell contentView的程序化子视图

Ale*_*lds 20 iphone colors uitableview uiview uilabel

我正在添加一个UILabel实例作为我的自定义UITableViewCell实例的子视图contentView.

当我选择单元格时,除了标签的背景外,该行突出显示为蓝色.标签文字很清晰.

当我将标签和内容视图backgroundColor属性设置[UIColor clearColor]为时,标签文本变得模糊.

如何将标签背景颜色设置为清晰,以允许行突出显示,同时仍保持标签文字清晰?

我在其他地方读到的一个建议是round标签的frame值,但这没有任何影响.

这是我的自定义UITableViewCell子视图-setNeedsLayout方法的片段:

UILabel *_objectTitleLabel = [[UILabel alloc] initWithFrame:CGRectNull];
_objectTitleLabel.text = [self.awsObject cleanedKey];
_objectTitleLabel.font = [UIAppDelegate defaultObjectLabelFont];
_objectTitleLabel.highlightedTextColor = [UIColor clearColor]; //[UIAppDelegate defaultLabelShadowTint];
_objectTitleLabel.backgroundColor = [UIColor clearColor]; //[UIAppDelegate defaultWidgetBackgroundTint];
_objectTitleLabel.frame = CGRectMake(
        kCellImageViewWidth + 2.0 * self.indentationWidth,
        0.5 * (self.tableView.rowHeight - 1.5 * kCellLabelHeight) + kCellTitleYPositionNudge,
        contentViewWidth,
        kCellLabelHeight
);
_objectTitleLabel.frame = CGRectIntegral(_objectTitleLabel.frame);
_objectTitleLabel.tag = kObjectTableViewCellTitleSubviewType;
//NSLog(@"_objectTitleLabel: %@", NSStringFromCGRect(_objectTitleLabel.frame));
[self.contentView addSubview:_objectTitleLabel];
[_objectTitleLabel release], _objectTitleLabel = nil;

...

self.contentView.backgroundColor = [UIAppDelegate defaultWidgetBackgroundTint]; 
self.contentView.clearsContextBeforeDrawing = YES;
self.contentView.autoresizesSubviews = YES;
self.contentView.clipsToBounds = YES;
self.contentView.contentMode = UIViewContentModeRedraw;
Run Code Online (Sandbox Code Playgroud)

Stu*_*nie 35

问题是子像素渲染,当您的原点(浮点值)具有非零小数分量时会发生这种情况.舍入到最接近的整数,你应该没事.

  • 警告:当设置具有奇数宽度和/或高度的视图的"中心"时,也会出现此问题. (4认同)

Joh*_*rug 9

在我的情况下,设置shouldRasterize = YES包含UILabel的视图的CGLayer是罪魁祸首.删除该行使文本更好,更清晰.


use*_*300 7

好的发现了问题,确保您的父视图的坐标也是圆的.