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.