2015-06-25 29 views
6

Update 1-fontWithSize powrocie inny obiekt czcionki

znalazłem obejście:

// instead of 
font = [font fontWithSize:pointSize]; 

// i can do this and get the correct font back 
font = [UIFont fontWithName:font.fontName size:pointSize] 

Używam Nick Lockwood's HTMLLabel klasę, aby włączyć się w NSAttributedString HTML, który odznacza się stylizacji w obrębie HTML. W przeważającej części działa świetnie.

Używam jednak niestandardowej czcionki w mojej aplikacji i z jakiegoś powodu moja czcionka jest zawsze renderowana pogrubioną czcionką. Nie mam tego problemu przy użyciu czcionek systemowych. Zawęziłem to do tej metody:

- (UIFont *)font 
{ 
    // ** Code Path 1 ** 
    UIFont *font = _styles[HTMLFont]; 
    if ([font isKindOfClass:[NSString class]]) 
    { 
     font = [UIFont fontWithName:(NSString *)font size:17.0f]; 
    } 
    NSInteger pointSize = [_styles[HTMLTextSize] floatValue] ?: font.pointSize; 
    if (self.bold) { 
     if (self.italic) 
     { 
      font = [font boldItalicFontOfSize:pointSize]; 
     } 
     else 
     { 
      font = [font boldFontOfSize:pointSize]; 
     } 
    } else if (self.italic) { 
     font = [font italicFontOfSize:pointSize]; 
    } else { 
     // ** Code Path 2 ** 
     font = [font fontWithSize:pointSize]; 
    } 
    return font; 
} 

Ta metoda nazywana jest wiele razy. Podczas pierwszej iteracji, jeżeli ustawić punkt przerwania na Code Path 1 i zalogować font, mam co ja spodziewałem:

<UICTFont: 0x7fd41bc8f2b0> font-family: "Fort-Book"; font-weight: bold; font-style: normal; font-size: 18.00pt 

Jednak gdybym wylogować font po Code Path 2, otrzymuję to:

<UICTFont: 0x7fd41bd709a0> font-family: "Fort"; font-weight: bold; font-style: normal; font-size: 18.00pt 

W jakiś sposób, dzwoniąc pod numer -fontWithSize:, moja czcionka zmienia się z Fort-Book na regularną Fort.

Dokumentacja fontWithSize wyraźnie stwierdza:

Zwraca obiekt czcionki, która jest taka sama jak w odbiorniku, ale który ma określony rozmiar zamiast.

Dlaczego miałbym otrzymać inny obiekt czcionki?

+0

Możesz wstawić to jako odpowiedź i zaakceptować po kilku dniach .. – 0yeoj

+0

Innym obejściem byłoby utworzenie nowej czcionki z deskryptora czcionki czcionki: [czcionka UIFontWithDescriptor: [boldItalicFont fontDescriptor] size: desiredFontSize]; – Russian

Odpowiedz

4

Okazało się, że to błąd w iOS 8.3 (może wcześniej).

Złożyłem radar (# 21540510).

Można tutaj zobaczyć na własne oczy: https://github.com/djibouti33/UIFontBug

W międzyczasie, jeśli masz problemy z -fontWithSize, zamiast używać +fontWithName:size:.

+0

Miał to samo odkrycie. Dzięki za wypełnienie radaru. – hfossli

+1

A więc dwa lata później wciąż nie jest naprawiony? Miły ! –

Powiązane problemy