2012-03-16 19 views
6

iPhone uygulamasında tüm UILabels için özel bir yazı tipi belirledim (daha kesin olması için, UILabel'ı alt sınıflara ayırdım, bir yöntemi geçersiz kıldım, bu yöntemdeki özel yazı tipini ayarladıktan sonra IB'deki tüm etiketleri bu özel sınıf). Şimdiki sorun şu ki, bütün metinler beklenen taban çizgisinin çok altındadır, yani 'y' ve 'g' gibi harfler aşağıdan kesilir. Burada benzer sorunları hakkında okudum:Özel yazı tipiyle UILabel yanlış işlenmiş

UIButton custom font vertical alignment

Custom installed font not displayed correctly in UILabel

Sonra (başlangıçta 990 olarak ayarlandı) bu çözümlerin anlatıldığı gibi ascender ile ilgilenmek çalıştı. Yaklaşık 500'e ayarlanması iyi sonuçlara yol açtı, ancak bundan çok sonra değil, çok satırlı metinlerdeki çizgilerin birbirine karıştığını fark ettim, ki bu elbette ki kabul edilemez. UITextViews, yazı tipinin başlangıçtaki temel çizgileri ile ince bir görüntü oluşturuyor gibi görünüyor ..

Bu sorunu çözmek için pratik bir yol var mı? Tabii ki, çok veya tek satırlı metinler için farklı yükselenler ile birkaç yazı tipini tutabilirim, ancak bu oldukça dağınık bir çözümdür ..

Not: ttf'ye dönüştürmeyi denedim ancak yazı tipi otf biçiminde sağlanmıştır. , aynı sonuçlara yol açıyor.

cevap

6

Tamam, birisi ilgilenirse, benim için çalışması gereken bir çözüm buldum. Bu, verilen dikdörtgeni değiştirerek ve süper-sınıf yöntemine geçirerekUILabel metodunu geçersiz kılar.

- (void)drawTextInRect:(CGRect)rect { 
    CGFloat pointSize = self.font.pointSize; 

    CGRect newRect = CGRectMake(rect.origin.x, rect.origin.y - (0.25 * pointSize), rect.size.width, rect.size.height); 

    [super drawTextInRect:newRect]; 
} 

Gerçi 0.25 dışındaki farklı değerler denemek gerekebilir ...

+0

bunu kullandım. - (void) drawTextInRect: (CGRect) rect { CGFloat pointSize = self.font.pointSize; CGRect newRect = CGRectMake (rect.origin.x, rect.origin.y + (0.2 * pointSize), rect.size.width, rect.size.height); [super drawTextInRect: newRect]; } – kgibbon