Подтвердить что ты не робот

DrawInRect: withAttributes vs drawInRect: withFont: lineBreakMode: выравнивание

Я работаю над новой версией своего приложения и пытаюсь заменить устаревшие сообщения, но не могу пройти мимо этого.

Я не могу понять, почему 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];

Любая помощь будет отличной. Спасибо.

4b9b3361

Ответ 1

Чтобы установить цвет текста, вам необходимо передать NSForegroundColorAttributeName в качестве дополнительного параметра.

NSDictionary *dictionary = @{ NSFontAttributeName: self.font,
                              NSParagraphStyleAttributeName: paragraphStyle,
                              NSForegroundColorAttributeName: self.textColor};

Ответ 2

Я сделал 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];
}

Я не вижу разницы между выводами этих двух методов. Может быть, проблема в другом месте вашего кода?