UILabel için satır sonu nasıl eklenir?


262

Bakalım ben böyle bir dize var:

NSString *longStr = @"AAAAA\nBBBBB\nCCCCC";  

UILabel'ın mesajı böyle göstermesi için nasıl yapabilirim?

AAAAA
BBBBB
CCCCC

Ben \nUILabel tarafından tanınan sanmıyorum , bu yüzden UILabel orada bir satır sonu oluşturmak zorunda bilmesi için NSString içine koyabilirsiniz bir şey var mı?

Yanıtlar:


332

Dizenizde kullandığınız \ngibi kullanın .

Herhangi bir sayıda satıra izin vermek için numberOfLines değerini 0 olarak ayarlayın.

label.numberOfLines = 0;

Etiket çerçevesini, kullanarak metnin boyutuna uyacak şekilde güncelleyin sizeWithFont:. Bunu yapmazsanız, metniniz dikey olarak ortalanır veya kesilir.

UILabel *label; // set frame to largest size you want
...
CGSize labelSize = [label.text sizeWithFont:label.font
                          constrainedToSize:label.frame.size
                              lineBreakMode:label.lineBreakMode];
label.frame = CGRectMake(
    label.frame.origin.x, label.frame.origin.y, 
    label.frame.size.width, labelSize.height);

Güncelleme: Kullanımdan kaldırıldı

sizeWithFont:constrainedToSize:lineBreakMode:

Referans, Kullanımdan kaldırılmış boyut için değiştirmeWithFont: iOS 7'de?

CGSize labelSize = [label.text sizeWithAttributes:@{NSFontAttributeName:label.font}];

label.frame = CGRectMake(
    label.frame.origin.x, label.frame.origin.y, 
    label.frame.size.width, labelSize.height);

2
UILabelBir yoktur originne de sizeiOS'ta özelliği? Muhtemelen label.frame.origin.xvb.
Olmalı

1
SizeWithAttributes kullanarak çerçeveyi ayarlamak yerine, çalışmak için sizeToFit öğesini çağırabilir ve çerçeve boyutunu hızlı bir adımda ayarlayabilirsiniz.
jimmyjudas

@Hermang, cevabı güncellediğiniz için teşekkürler.
Gerry Shaw

275

resim açıklamasını buraya girin

Satır feed'i eklemek için Interface Builder'daki küçük kutuya yazarken Option-return kullanın (\ n). Arayüz Oluşturucu'nun Etiket niteliklerinde # Satır = 0 olarak ayarlayın.

Etiketi seçin ve sonra yukarıdaki resimde olduğu gibi Lines özelliğini 0 olarak değiştirin ve ardından satır sonu için dizenizde \ n kullanın.


2
bu süper kullanışlı!
Nitin Alabur

Bunu sonsuza kadar aradım. Thanks :)
Shai Mishali

Harika bir cevap. Teşekkürler!
Macondo2Seattle

1
Etiketi programlı olarak ayarlarken ve dizeye \ n (yeni satır) eklerken çalışmaz.
Chewie Chorkie

inanılmaz. Benim gereksinimim bunu yalnızca storyboard etiketi ile yapmaktı. Ve bu bir cazibe gibi çalıştı.
Tejas

132

Bir XML dosyasından bir dize okursanız \n, bu dizedeki satır sonu UILabelmetinde çalışmaz . \nBir satır sonu için değil ayrıştırılır.

İşte bu sorunu çözmek için küçük bir numara:

// correct next line \n in string from XML file
NSString *myNewLineStr = @"\n";
myLabelText = [myLabelText stringByReplacingOccurrencesOfString:@"\\n" withString:myNewLineStr];

myLabel.text = myLabelText;

Bu nedenle \n, dizenizdeki ayrıştırılmamış parçayı \nbir sabit kodda ayrıştırılmış olarak değiştirmeniz gerekir NSString.

Diğer etiket ayarlarım:

myLabel.numberOfLines = 0;
myLabel.backgroundColor = [UIColor lightGrayColor];
myLabel.textColor = [UIColor redColor]; 
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14.0];   
myLabel.textAlignment = UITextAlignmentCenter;

En önemlisi kümesine olduğu numberOfLinesiçin 0(etiketteki hatlarının = sınırsız sayıda).

Apple'ın neden \nXML'den okunan dizelerde ayrıştırmayı seçmediğine dair bir fikriniz yok mu?

Bu yardımcı olur umarım.


1
iOS, \nParse.com'dan dizeler alırken ayrıştırmaz (Sanırım diğer API'lardan dize alırken de olur)
Brian

Günümü kurtardın. Ben xml dosyalarından newline ile dize alıyorum.
Senry,

127

Arayüz oluşturucuda Ctrl+Enter/n konuma eklemek için . Bu şekilde aşağıdaki durum uygulanabilir

aaa
aaaaaaa


Hayır, oy vermedim. Daha iyi sunum için cevabı yeni düzenledim.
Manoj Kumar

Gerçekten çok basit! +1
marlonpya

2
Bu numarayı hiç bilmediğime inanamıyorum! Shift-Enter denedim çünkü bu başka bir yerde oldukça standart. Bunun için teşekkürler!
Echelon

tam da aradığım şey buydu! teşekkür ederim +1!
rickrvo

1
Harika gönderi! Küçük düzeltme: / n yerine insert \ n demek istediğinize inanıyorum
craft

25

Üzerinde numberOfLinesözelliği ayarlamanız gerekir UILabel. Varsayılan değer 1'dir , 0 olarak ayarlarsanız tüm sınırları kaldırır.


22

Bunun \nyerine (ters eğik çizgi) not edilmesi önemlidir /n.


10

Swift 2.2'de,> iOS 8

Storyboard'da, Attribute Inspector altında Lines = 0 ayarladım ve etikete bir referans çıkışı bağladım. Sonra böyle bir denetleyicide kullanın:

 @IBOutlet weak var listLabel: UILabel!

 override func viewDidLoad() {
      ...
      listLabel.text = "Line 1\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7\nLine 8"
 }

6

// numberOfLines değerini sıfıra ayarlamayı unutmayın

UILabel* locationTitle = [[UILabel alloc] initWithFrame:CGRectMake(5, 30, 230, 40)];
locationTitle.font = [UIFont systemFontOfSize:13.0];
locationTitle.numberOfLines = 0;
locationTitle.text = [NSString stringWithFormat:@"Eaton industries pvt. Ltd \nUK Apr 12"];
[cell addSubview:locationTitle];

6

Sadece böyle yap

NSString * strCheck = @"A\nB";

strCheck = [strCheck stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];  //This is to prevent for fetching string from plist or data structure

label.numberOfLines = 0;

label.lineBreakMode = NSLineBreakByWordWrapping;

label.text = strCheck;

4

Xcode 6'da, kelime kaydırmayı kullanırken bir dizenin içinde bile \ n kullanabilirsiniz. Çalışacak. Yani mesela:

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, screenRect.size.width, 50)];
label.textAlignment = NSTextAlignmentCenter;
label.text = @"This will be on the first line\nfollowed by a line under it.";
label.lineBreakMode = UILineBreakModeWordWrap;
label.numberOfLines = 0;

3

A'yı kullanmanız UILabel, varsayılan ayarın 1 satır olduğunu hatırlamanız gerekiyorsa, bu yüzden kaç mola eklediğiniz ( \nveya \r) önemli değil, eklemeye izin verilebilmesi için birden fazla satıra ayarlandığından emin olmanız gerekir daha fazla satır.

Bir alternatif, UITextViewgerçekten çok satırlılar için kullanılan kullanmaktır .

UILabel'ın XCode öznitelik bölümünde bunu kolayca yapabilirsiniz, ekran görüntüsüne bakın:

resim açıklamasını buraya girin


3

Kolay bir çözüm isteyenler için, Etiket etiketi giriş kutusunda aşağıdakileri yapın:

Sayı satırlarınızın 0 olarak ayarlandığından emin olun.

Alt + Enter

(Alt seçenek anahtarınızdır)

Şerefe!



2

Benim durumumda da \ n çalışmadı, satır sayısını 0 olarak tutarak sorunu düzelttim ve metni kopyaladım ve örneğin Hello \ n World i yapıştırılan yerine yeni satırın kendisi ile yapıştırdım

Merhaba

Dünya

arayüz oluşturucuda.


Mükemmel! İşler.
DmitryKanunnikoff

2

XCode 11'de Swift 5 \niyi çalışıyor, aşağıdaki kodu deneyin:

textlabel.numberOfLines = 0
textlabel.text = "This is line one \n This is line two \n This is line three"

1
textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC";
textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC
textLabel.lineBreakMode = UILineBreakModeWordWrap;
NSLog(@"The textLabel text is - %@",textLabel.text);

0

Sorun yaşayan sizeWithFont:constrainedToSize:lineBreakMode:herkes veya ios8'e geçiş yapan herkes için (yöntem ios7'den kaldırılmıştır), sizeToFitbunun yerine yükseklikimi ayarladım .

UILabel *label;
label.numberOfLines = 0;
// Setup label with desired settings
...
[label sizeToFit];
label.frame = CGRectMake(label.frame.origin.x,     // Or use any desired origin
                         label.frame.origin.y, 
                         label.frame.size.width,   // Or use any desired width
                         label.frame.size.height);

0
NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet;
NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"\n"];

0

Özellikle otomatik yerleşim kullanırken etiket çerçevesi boyutlarını değiştirmek benim için yanlış görünüyor. AppendFormat yöntemini kullanmak daha uygun görünüyor. İşte benim örnek:

NSMutableString *list = [[NSMutableString alloc] init];
NSArray *textArray = @[@"AAAA", @"BBBB"];
for (NSString *string in textArray) {
    [list appendFormat:@"%@\n", string.mutableCopy];
}
self.label.text = list;
self.label.numberOfLines = 0;

0

UILable özelliklerinizi Düz'den İlişkili'ye ayarlarsanız ... UILabel, UILabel yüksekliğiniz ve genişliğiniz metni görüntülemek istediğiniz ekran alanına sığacak şekilde ayarlandığından bağımsız olarak çok satırlı metin tutar.


0

Aynı problemle karşılaştım ve işte, problemi nasıl çözdüğüm. Umarım bu birisi için faydalı olacaktır.

// Hızlı 2

   lblMultiline.lineBreakMode = .ByWordWrapping // or use NSLineBreakMode.ByWordWrapping
   lblMultiline.numberOfLines = 0 

// Amaç-C

  lblMultiline.lineBreakMode = NSLineBreakByWordWrapping;
  lblMultiline.numberOfLines = 0;

// C # (Xamarin.iOS)

  lblMultiline.LineBreakMode = UILineBreakMode.WordWrap;
  lblMultiline.Lines = 0;  
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.