Apakah ada cara untuk memiliki beberapa baris teks UILabel
seperti di UITextView
atau haruskah saya menggunakan yang kedua?
Apakah ada cara untuk memiliki beberapa baris teks UILabel
seperti di UITextView
atau haruskah saya menggunakan yang kedua?
Jawaban:
Saya menemukan solusinya.
Kita hanya perlu menambahkan kode berikut:
// Swift
textLabel.lineBreakMode = .ByWordWrapping // or NSLineBreakMode.ByWordWrapping
textLabel.numberOfLines = 0
// For Swift >= 3
textLabel.lineBreakMode = .byWordWrapping // notice the 'b' instead of 'B'
textLabel.numberOfLines = 0
// Objective-C
textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textLabel.numberOfLines = 0;
// C# (Xamarin.iOS)
textLabel.LineBreakMode = UILineBreakMode.WordWrap;
textLabel.Lines = 0;
Pulihkan jawaban lama (untuk referensi dan pengembang yang bersedia mendukung iOS di bawah 6.0):
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;
Di sisi: kedua nilai enum menghasilkan to 0
anyway.
cell.textLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
dancell.textLabel?.numberOfLines = 0
Di IB, setel jumlah baris ke 0 (memungkinkan jalur tak terbatas)
Saat mengetik dalam bidang teks menggunakan IB, gunakan "alt-return" untuk menyisipkan pengembalian dan pergi ke baris berikutnya (atau Anda dapat menyalin dalam teks yang sudah dipisahkan oleh baris).
Solusi terbaik yang saya temukan (untuk masalah frustasi yang seharusnya diselesaikan dalam kerangka kerja) mirip dengan vaychick.
Cukup atur jumlah baris ke 0 dalam IB atau kode
myLabel.numberOfLines = 0;
Ini akan menampilkan garis-garis yang diperlukan tetapi akan memposisikan ulang label sehingga bagian tengahnya horizontal (sehingga label 1 baris dan 3 baris sejajar dalam posisi horizontal mereka). Untuk memperbaikinya tambahkan:
CGRect currentFrame = myLabel.frame;
CGSize max = CGSizeMake(myLabel.frame.size.width, 500);
CGSize expected = [myString sizeWithFont:myLabel.font constrainedToSize:max lineBreakMode:myLabel.lineBreakMode];
currentFrame.size.height = expected.height;
myLabel.frame = currentFrame;
myUILabel.numberOfLines = 0;
myUILabel.text = @"your long string here";
[myUILabel sizeToFit];
Jika Anda harus menggunakan:
myLabel.numberOfLines = 0;
properti Anda juga dapat menggunakan garis istirahat standar ("\n")
, dalam kode, untuk memaksa baris baru.
ayo coba ini
textLabel.lineBreakMode = NSLineBreakModeWordWrap; // UILineBreakModeWordWrap deprecated
textLabel.numberOfLines = 0;
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;
Solusi di atas tidak berfungsi dalam kasus saya. Saya melakukan seperti ini:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// ...
CGSize size = [str sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:UILineBreakModeWordWrap];
return size.height + 20;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
// ...
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 0;
cell.textLabel.font = [UIFont fontWithName:@"Georgia-Bold" size:18.0];
}
// ...
UILabel *textLabel = [cell textLabel];
CGSize size = [text sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0]
constrainedToSize:CGSizeMake(240.0, 480.0)
lineBreakMode:UILineBreakModeWordWrap];
cell.textLabel.frame = CGRectMake(0, 0, size.width + 20, size.height + 20);
//...
}
Gunakan story borad: pilih label untuk mengatur jumlah baris menjadi nol ...... Atau Referensikan ini
Swift 3
Tetapkan jumlah baris nol untuk informasi teks dinamis, ini akan berguna untuk berbagai teks.
var label = UILabel()
let stringValue = "A label\nwith\nmultiline text."
label.text = stringValue
label.numberOfLines = 0
label.lineBreakMode = .byTruncatingTail // or .byWrappingWord
label.minimumScaleFactor = 0.8 . // It is not required but nice to have a minimum scale factor to fit text into label frame
UILabel *helpLabel = [[UILabel alloc] init];
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:label];
helpLabel.attributedText = attrString;
// helpLabel.text = label;
helpLabel.textAlignment = NSTextAlignmentCenter;
helpLabel.lineBreakMode = NSLineBreakByWordWrapping;
helpLabel.numberOfLines = 0;
Untuk beberapa alasan ini tidak berfungsi untuk saya di iOS 6 tidak yakin mengapa. Mencobanya dengan dan tanpa teks yang dikaitkan. Ada saran.
Coba gunakan ini:
lblName.numberOfLines = 0;
[lblName sizeToFit];
Hal-hal ini membantu saya
Ubah properti UILabel ini
label.numberOfLines = 0;
label.adjustsFontSizeToFitWidth = NO;
label.lineBreakMode = NSLineBreakByWordWrapping;
Dan sambil memberikan input, gunakan String \ n untuk menampilkan kata-kata yang berbeda di baris yang berbeda.
Contoh:
NSString *message = @"This \n is \n a demo \n message for \n stackoverflow" ;
Metode 1:
extension UILabel {//Write this extension after close brackets of your class
func lblFunction() {
numberOfLines = 0
lineBreakMode = .byWordWrapping//If you want word wraping
//OR
lineBreakMode = .byCharWrapping//If you want character wraping
}
}
Sekarang panggil saja seperti ini
myLbl.lblFunction()//Replace your label name
EX:
Import UIKit
class MyClassName: UIViewController {//For example this is your class.
override func viewDidLoad() {
super.viewDidLoad()
myLbl.lblFunction()//Replace your label name
}
}//After close of your class write this extension.
extension UILabel {//Write this extension after close brackets of your class
func lblFunction() {
numberOfLines = 0
lineBreakMode = .byWordWrapping//If you want word wraping
//OR
lineBreakMode = .byCharWrapping//If you want character wraping
}
}
Metode 2:
Secara terprogram
yourLabel.numberOfLines = 0
yourLabel.lineBreakMode = .byWordWrapping//If you want word wraping
//OR
yourLabel.lineBreakMode = .byCharWrapping//If you want character wraping
Metode 3:
Melalui papan cerita
Untuk menampilkan beberapa baris yang ditetapkan 0 (Nol), ini akan menampilkan lebih dari satu baris di label Anda.
Jika Anda ingin menampilkan n baris, atur n.
Lihat di bawah layar.
Jika Anda ingin mengatur ukuran font minimum untuk label Klik Autoshrink dan Pilih opsi Ukuran Font Minimum
Lihat layar di bawah ini
Di sini mengatur ukuran font minimum
EX: 9 (Dalam gambar ini)
Jika label Anda mendapatkan lebih banyak teks pada saat itu, teks label Anda akan menyusut hingga 9
UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
[labelName sizeToFit];
labelName.numberOfLines = 0;
labelName.text = @"Your String...";
[self.view addSubview:labelName];
Anda dapat melakukannya melalui Storyboard juga:
Anda harus mencoba ini:
-(CGFloat)dynamicLblHeight:(UILabel *)lbl
{
CGFloat lblWidth = lbl.frame.size.width;
CGRect lblTextSize = [lbl.text boundingRectWithSize:CGSizeMake(lblWidth, MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:lbl.font}
context:nil];
return lblTextSize.size.height;
}
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 30)];
[textLabel sizeToFit];
textLabel.numberOfLines = 0;
textLabel.text = @"Your String...";
Dalam fungsi ini, lewati string yang ingin Anda tetapkan dalam label dan lewati ukuran font sebagai ganti self.activityFont dan lewati lebar label di tempat 235, sekarang Anda mendapatkan tinggi label sesuai dengan string Anda. itu akan bekerja dengan baik.
-(float)calculateLabelStringHeight:(NSString *)answer
{
CGRect textRect = [answer boundingRectWithSize: CGSizeMake(235, 10000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.activityFont} context:nil];
return textRect.size.height;
}
Diatur di bawah ini dalam kode atau di storyboard itu sendiri
Label.lineBreakMode = NSLineBreakByWordWrapping; Label.numberOfLines = 0;
dan jangan lupa untuk mengatur batasan kiri, kanan, atas dan bawah untuk label jika tidak akan bekerja.
Swift 4:
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
label.preferredMaxLayoutWidth = superview.bounds.size.width - 10
Pada C #, ini bekerja untuk saya di dalam UITableViewCell.
UILabel myLabel = new UILabel();
myLabel.Font = UIFont.SystemFontOfSize(16);
myLabel.Lines = 0;
myLabel.TextAlignment = UITextAlignment.Left;
myLabel.LineBreakMode = UILineBreakMode.WordWrap;
myLabel.MinimumScaleFactor = 1;
myLabel.AdjustsFontSizeToFitWidth = true;
myLabel.InvalidateIntrinsicContentSize();
myLabel.Frame = new CoreGraphics.CGRect(20, mycell.ContentView.Frame.Y + 20, cell.ContentView.Frame.Size.Width - 40, mycell.ContentView.Frame.Size.Height);
myCell.ContentView.AddSubview(myLabel);
Saya pikir intinya di sini adalah: -
myLabel.TextAlignment = UITextAlignment.Left;
myLabel.LineBreakMode = UILineBreakMode.WordWrap;
myLabel.MinimumScaleFactor = 1;
myLabel.AdjustsFontSizeToFitWidth = true;
Kode ini mengembalikan tinggi ukuran menurut teks
+ (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font
{
CGFloat result = font.pointSize+4;
if (text)
{
CGSize size;
CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, 999)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:font}
context:nil];
size = CGSizeMake(frame.size.width, frame.size.height+1);
result = MAX(size.height, result); //At least one row
}
return result;
}
UILineBreakModeWordWrap
sudah usang di iOS 6. Anda sekarang harus menggunakanNSLineBreakByWordWrapping = 0
Lihat dokumentasi di sini