30

我正在开发我的应用程序的新版本,并试图替换已弃用的消息,但无法通过此消息。

我不知道为什么drawInRect:withAttributes不工作。发送消息时代码正确显示drawInRect:withFont:lineBreakMode:alignment,但发送时不起作用drawInRect:withAttributes

我使用相同的矩形和字体,我相信是相同的文本样式。常量只是将矩形定位在图像下方,但我对两个调用都使用相同的矩形,所以我确定矩形是正确的。

(注意下面使用的bs.name是一个 NSString 对象)

        CGRect textRect = CGRectMake(fCol*kRVCiPadAlbumColumnWidth,
                                     kRVCiPadAlbumColumnWidth-kRVCiPadTextLabelYOffset,
                                     kRVCiPadAlbumColumnWidth,
                                     kRVCiPadTextLabelHeight);
        NSMutableParagraphStyle *textStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
        textStyle.lineBreakMode = NSLineBreakByWordWrapping;
        textStyle.alignment = NSTextAlignmentCenter;
        UIFont *textFont = [UIFont systemFontOfSize:16];

使用上面的变量这不起作用(屏幕上没有绘制任何内容)

        [bs.name drawInRect:textRect
             withAttributes:@{NSFontAttributeName:textFont,
                              NSParagraphStyleAttributeName:textStyle}];

这确实有效(字符串在屏幕上正确绘制)使用上面的相同变量

        [bs.name drawInRect:textRect
                   withFont:textFont
              lineBreakMode:NSLineBreakByWordWrapping
                  alignment:NSTextAlignmentCenter];

任何帮助都会很棒。谢谢。

4

2 回答 2

37

要设置文本的颜色,您需要将NSForegroundColorAttributeName属性作为附加参数传递。

NSDictionary *dictionary = @{ NSFontAttributeName: self.font,
                              NSParagraphStyleAttributeName: paragraphStyle,
                              NSForegroundColorAttributeName: self.textColor};
于 2013-10-10T10:18:10.160 回答
30

我制作了一个仅UIView包含drawRect:您提供的代码的

- (void)drawRect:(CGRect)frame
{
    NSMutableParagraphStyle *textStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
    textStyle.lineBreakMode = NSLineBreakByWordWrapping;
    textStyle.alignment = NSTextAlignmentCenter;
    UIFont *textFont = [UIFont systemFontOfSize:16];

    NSString *text = @"Lorem ipsum";

    // iOS 7 way
    [text drawInRect:frame withAttributes:@{NSFontAttributeName:textFont, NSParagraphStyleAttributeName:textStyle}];

    // pre iOS 7 way
    CGFloat margin = 16;
    CGRect bottomFrame = CGRectMake(0, margin, frame.size.width, frame.size.height - margin);
    [text drawInRect:bottomFrame withFont:textFont lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter];
}

我看不出这两种方法的输出有什么区别。也许问题出在您的代码中的其他地方?

于 2013-10-09T15:31:18.103 回答