2010-10-11 20 views
8

Dinamik metin içeren UILabel var. Bazen metin gösterilmek için çok uzun ve bu nedenle otomatik olarak kesilmiştir. Kesilmiş metnin görünür kısmının genişliğini nasıl bulabilirim? kesme yapılacaktır zaman sadece algılayabilir an çokKesilmiş UILabel metninin genişliği nasıl bulunur?

sizeThatFits, untruncated metnin uzunluğunu döndürür. Bu üç nokta dahil olmak üzere, ne kadar görülebilir olduğunu bilmeniz gerekir. Herhangi bir ipucu?

Açıklama: Metin kesildiğinde, genellikle UILabel genişliğinden daha kısadır.

cevap

5

Robot K doğrudur. Ne olduysa

aşağıdaki yapardım:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 24)]; 
    label.text = @"this is some really long text that i want in a small label"; 
    [view addSubview:label]; 

    CGSize size = [label.text sizeWithFont:label.font constrainedToSize:label.frame.size 
       lineBreakMode:label.lineBreakMode]; 

Bu size bir değer vermelidir (hesaba kısıtlı maksimum boyutu ve kesme yöntemini alarak) az 200.

+0

Robot K multirow durum için doğru, ama benim sorunum tek satırdı. Ayrıca, buna ek olarak genel bir çözüm olan lineBreakMode'u da söylemiştin. Thanx! – JOM

4

Metnin kesilmesi durumunda, genişliğin neden farklı olacağını, UILabel'in genişliğini anlamıyorum. Yine de, verilen bir yazı tipiyle bir dizenin boyutunu hesaplamak için sizeWithFont:constrainedToSize: kullanabilir, ancak "kısıtlayıcı boyut" ile sınırlı olabilirsiniz.

+1

Kesilmiş metnin genişliği daha az olabilir! UILabel genişliği ile aynı olsaydı, sormazdı. Yazı tipi boyutu 15'e sabitlenir, ancak sizeWithFont'un sizeThatFits öğesinden başka bir şey verilip verilmeyeceğini kontrol eder. – JOM

+1

UILabel genişlik 205, tek sıra. sizeThatFits 291, sizeWithFont: constrainedToSize, 163, sizeWithFont: constrainedToSize: lineBreakMode, 203, sizeWithFont: forWidth: lineBreakMode, 203'tür. "163" ve "203" çözümleri arasındaki farkı işaret etmek için Thanx! – JOM