是否可以重写UILabel的drawTextInRect方法来改变UILabel文本的大小?

时间:2009-07-10 08:45:30

标签: objective-c iphone cocoa-touch core-graphics

Apple的drawTextInRect文档似乎表明这是可能的:

“调用此方法时,当前图形上下文已使用默认环境和文本颜色进行配置。在重写方法中,您可以进一步配置当前上下文,然后调用super进行实际绘制或者你可以自己做绘画。如果你自己渲染文字,你不应该调用超级。“

但是我的UILabel子类(我已经确认 被调用)的下面示例不会导致文本大小发生变化,无论我指定的是什么文本大小。我是否抓住了正确的背景或者错过了更大的东西?

- (void)drawTextInRect:(CGRect)rect{

    CGContextRef theContext = UIGraphicsGetCurrentContext();
    CGContextSetFontSize(theContext, 32.0); // <-- doesn't change text size

    [super drawTextInRect:rect];
}

注意 - 文本大小不是我需要更改文本的唯一内容,但是如果我可以更改文本大小,我很确定我需要做的其他更改会很容易。

6 个答案:

答案 0 :(得分:4)

/* use CGContextSetLineWidth() and CGContextSetStrokeColorWithColor() 
 to adjust your outline settings: directly preceding StrokeRect() */


- (void)drawTextInRect:(CGRect)rect{

    [super drawTextInRect:rect]; // let super do the work

    CGContextStrokeRect(UIGraphicsGetCurrentContext(),rect);
}

答案 1 :(得分:2)

我以为我们昨天有这个...... 你可以相信appKit超类会将字体和颜色设置为你在InterfaceBuilder中设置的设置,所以试图覆盖这种行为是徒劳的。你能做什么,按摩参数进入绘图功能以改变功能......尝试这样的事情:

- (void)drawTextInRect:(CGRect)rect{

    CGFloat newWidth = rect.size.width * 0.75;    // 3/4 the original width
    CGFloat newHeight = rect.size.height * 0.812; // and a little less tall.

    CGRect newRect = CGRectMake(rect.origin.x,rect.origin.y,newWidth,newHeight);

    [super drawTextInRect:newRect]; // draw text into the NEW rect!
}

另外,nikolai是正确的:如果你想改变字体,那么调用setFont!

答案 2 :(得分:2)

您可以尝试设置UILabel的字体:

UIFont *font = [UIFont fontWithName:@"Courier" size:32];
[self setFont: font]; 
[super drawTextInRect:rect];

答案 3 :(得分:1)

我认为对[super drawTextInRect:rect]的调用也会设置字体大小,撤消对CGContextSetFontSize的调用。如果你想要这个,你可能不得不自己做所有的绘图,而不是调用super的实现。

答案 4 :(得分:1)

UILabel的drawTextInRect方法设置文本大小(以及字体和其他设置)本身,覆盖您的大小。如果要更改字体大小,为什么不使用setFont:方法或minimumFontSize属性?

答案 5 :(得分:1)

您不在委托方法中执行此操作。你需要得到一个指针(IBOutlet)到UILabel。

然后您可以使用UILabel的 setText:方法设置UILabel的字体,粗体等