Ketahui di mana UILabel membagi string ketika properti multi-barisnya aktif

Ada masalah, perlu menetapkan beberapa teks ke judul UIButton. Telah menyetel mode jeda baris tombol ke NSLineBreakByCharWrapping sehingga string hanya dipisahkan oleh karakter di akhir setiap baris. Tetapi saya perlu menyisipkan tanda hubung di akhir baris untuk menunjukkan kesinambungan kata. Inilah yang saya coba -

    // Initialize the button

    titleButton.titleLabel.lineBreakMode = NSLineBreakByCharWrapping;
    titleButton.titleLabel.backgroundColor = [UIColor yellowColor];
    [titleButton.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:15]];

    // Make the string here
    NSMutableString *titleString = [[NSMutableString alloc] initWithString:@"abcdefghijklmnopqrs tuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"];
        // Insert hyphens 
        int titleLength = [titleString length];
        int hyphenIndex = 19;
        while (hyphenIndex<titleLength) { 
            UniChar charatIndex = [titleString characterAtIndex:hyphenIndex];
            if ((charatIndex - ' ') != 0) { // Check if its not a break bw two words
                [titleString insertString:@"-" atIndex:hyphenIndex]; // else insert an hyphen to  indicate word continuity
            }
            hyphenIndex += 19; //Since exactly 20 char are shown in single line of the button's label. 
        }
        //Set the hyphenated title for the button
        [titleButton setTitle:titleString forState:UIControlStateNormal];
        [titleString release];

Ini adalah jarak terdekat yang bisa saya dapatkan.

masukkan deskripsi gambar di sini

Bantuan apa pun akan sangat dihargai.


person nuteron    schedule 09.01.2013    source sumber
comment
Lihat jawaban ini. Ini akan memberi Anda array baris UILabel.   -  person TheTiger    schedule 06.08.2013
comment
Silakan buka tautan ini, ini akan membantu Anda stackoverflow.com/a/38146955/4940425   -  person Binoy jose    schedule 01.07.2016


Jawaban (4)


panjang kata kedua Anda lebih panjang dari garis (lebar tombol) itulah sebabnya hal ini terjadi.

person Amit Battan    schedule 09.01.2013

menempelkan tanda hubung bukanlah ide yang bagus. Anda harus membagi string Anda menjadi beberapa bagian dengan ukuran yang sesuai dengan lebar tombol dengan menggunakan daripada menambahkan tanda hubung jika diperlukan

[String sizeWithFont:font constrainedToSize:Size lineBreakMode:LineBreakMode]

Ide utamanya adalah untuk mendapatkan bagian dari string awal (tambahkan tanda hubung jika kata terputus), periksa apakah lebarnya sesuai dengan lebar tombol. Jika lebarnya lebih kecil, coba bagian yang lebih besar, jika cocok -- proses bagian selanjutnya

person mike-dutka    schedule 09.01.2013
comment
Ini adalah sesuatu yang saya coba tetapi tidak mendapatkan hasil yang akurat. Kesalahannya kira-kira satu karakter.. - person nuteron; 11.01.2013

Coba NSAttributedString

Ini memberikan kemungkinan besar untuk bekerja dengan string.

WWDC 2012-230

Misalnya:

- (NSUInteger)lineBreakBeforeIndex:(NSUInteger)index withinRange:(NSRange)aRange
//Returns the appropriate line break when the character at the index won’t fit on the same line as the character at the beginning of the range.
person Flop    schedule 06.08.2013
comment
Saya curiga ini mendapat suara negatif karena metode lineBreakBeforeIndex tampaknya hanya untuk OS X, dan pertanyaannya diberi tag iOS. Masih ada jawaban yang berguna di sini untuk orang-orang OS X :) - person Kenny Winker; 17.10.2013

Lihat jawaban saya di sini untuk mengetahui cara menggunakan NSParagraphStyle dan NSAttributedString untuk mendapatkan UILabel yang terputus dengan tanda hubung: https://stackoverflow.com/a/19414663/196358

person Kenny Winker    schedule 16.10.2013