2010-03-31 28 views
5

içinde çalışıyorum Bir yardımcı metinden bir yardım metnini yüklüyorum ve bir UIScrollView'da barındırılan UILabels biçiminde gösteriyorum. kodun Porsiyon aşağıdaki gibidir: herhangi bir 'uzun' metni doğru satırlara sarılı oluyor ikenSatır sonları UILabel

UILabel *sectionDetailLabel = [[[UILabel alloc] initWithFrame:CGRectMake(34, myOriginForThisSection, 286, 20)] autorelease]; 
    sectionDetailLabel.backgroundColor = [UIColor clearColor]; 
    sectionDetailLabel.numberOfLines = 0; 
    sectionDetailLabel.font = [UIFont systemFontOfSize:12]; 
    sectionDetailLabel.textColor = [UIColor blackColor]; 
    sectionDetailLabel.textAlignment = UITextAlignmentLeft; 
    sectionDetailLabel.lineBreakMode = UILineBreakModeWordWrap; 

    [baseScrollView addSubview:sectionDetailLabel]; 

    [sectionDetailLabel setText:myStringForThisSection]; 
    [sectionDetailLabel sizeToFit]; 

, ben 'myStringForThisSection karakterler 'n \' elle yeni satır kullanarak herhangi bir satır sonu eklemek edemiyorum '. Sadece satır aramayı istediğim yerde UILabel'de basılan '\' ve 'n' karakterlerini görüyorum.

Bunu inceledim ve genel fikir birliği 0OFLines değerini 0 olarak ayarlamak, lineBreakMode değerini geçerli bir değere ayarlamak ve sizeToFit'i çağırmak (veya WILFile :) 'ye dayalı olarak UILabel'ın çerçevesini ayarlamak) gerekir. Yukarıdaki kodda yaptığım her şey - ve bilinmeyen uzunluktaki uzun dizeleri UILabel üzerinde birden fazla satıra yerleştirirken mükemmel çalışıyor. Peki burada ne eksik olabilir?

Not: Kullanılan tüm değişkenler - baseScrollView, myStringForThisSection ve myOriginForThisSection - yukarıdaki kod yürütülmeye başlamadan önce yüklendi ve iyi çalışıyor.

+0

, bu gerçekleşecek. Kodda bildirilmiş/oluşturulmuşsa (belki de muhtemelen bir plistte), yeni satır bu şekilde kodlanacaktır. Yine de, eğer bir satır boş bir satırsa, yeni satır boşlukla takip edilmelidir. –

cevap

8

UILabel, kaçış sırasını \ n yorumlamıyor. Carriage Return ve/veya Line Feed'i temsil eden gerçek karakteri ekleyebilirsiniz. Yeni hattınızı tutmak için bir char yapın ve ardından takın.

unichar newLine = '\n'; 
NSString *singleCR = [NSString stringWithCharacters:&newLine length:1]; 
[myStringForThisSection insertString:singleCR atIndex:somePlaceIWantACR]; 

myStringForThisSection dosyanız değişebilir olduğu sürece, bunu yapmalıdır.

unichar chr[1] = {'\n'}; 
NSString *cR = [NSString stringWithCharacters:(const unichar *)chr length:1]; 

O zaman bu gibi kod şey kullanmak:

+0

Bu işe yaradı! Çok teşekkürler. –

+0

Kaçan taşıma dönüşü, yani '\ r', ayrıca çalışır. En azından Swift 3'te, iOS 10+ – Chris

3

yerine bu deneyin XCode 4.3

yukarıda Scot Gustafson cevabı zorlandığı

self.myLabel.text = [NSString stringWithFormat:@"First Label Line%@Second Label Line", cR]; 
+0

'da ... Uzun zaman oldu. “InsertAtIndex” türünde bir talimatı kullanmamanın esaslarını görebiliyorum, bu da her zaman tehlikeli olabilir ve özellikle de birçok farklı dilde veri ile uğraşırken. Birisi bunu özellikle yararlı bulursa veya eski kodun eski haline gelmesini de bulursa, bu cevabı "yükseltebilirim" veya oy verebilirim. –

+0

Dev her iki şekilde çalışır, benim yaptığım gibi benim gibi basit akıllara daha mantıklı geliyor! Ben tekCR tanımı ile ilgili sorun yaşadım - IOS5 xCode 4.3.1 – DoctorG

+0

bir hata aldım Eminim. Zaman geçirdiğimde her iki çözümü de kontrol edip geri göndereceğim. –

1

yapamadım Scott & 'un çalışmasını sağlayın (çalışmam için çok fazla zaman harcamamış olmama rağmen). Ama kaçan metni çıkardığımda işe yarayan basit çözüm. bir xml dosyasından. Benim dize işlevi sınıfının içinde

, ben define: dize harici bir kaynaktan geliyor

+(NSString)escapeXml:(NSString*)string { 
    return [string stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"]; 
} 
İlgili konular