Bir UİLabel içinde dikey hizalama
İki satırlık metin için yer ile UILabel
bir ben var. Metin çok kısa olduğunda, bazı durumlarda, bu metin etiketi dikey ortasında görüntülenir.
Nasıl dikey olarak her zaman UILabel
başında yapılacak metin hizalama miyim?
CEVAP
UILabel
ama etiketin çerçeve değiştirerek aynı etkiyi elde edebilirsiniz dikey hizalama ayarlamak için bir yol yok. Benim etiketler turuncu yaptım net oluyor görebilirsiniz.
İşte bunu yapmak için hızlı ve kolay yolu:
[myLabel sizeToFit];
Eğer birden fazla satır yapacak daha uzun metin ile bir etiket varsa, 0
(sıfır burada hatları sınırsız sayıda anlamına gelir) numberOfLines
ayarlayın.
myLabel.numberOfLines = 0;
[myLabel sizeToFit];
Uzun Versiyonu
Neler olduğunu görmek için kod şirketimi yapacağım. Interface Builder bu en çok da ayarlayabilirsiniz. Benim kurulum bir Görünüm Uygulama Tabanlı Photoshop kenar boşlukları göstermek için yaptım arka plan görüntüsü (20 Puan). Etiket boyutları ile neler olduğunu görebilirsiniz çekici turuncu renk.
- (void)viewDidLoad
{
[super viewDidLoad];
// 20 point top and left margin. Sized to leave 20 pt at right.
CGRect labelFrame = CGRectMake(20, 20, 280, 150);
UILabel *myLabel = [[UILabel alloc] initWithFrame:labelFrame];
[myLabel setBackgroundColor:[UIColor orangeColor]];
NSString *labelText = @"I am the very model of a modern Major-General, I've information vegetable, animal, and mineral";
[myLabel setText:labelText];
// Tell the label to use an unlimited number of lines
[myLabel setNumberOfLines:0];
[myLabel sizeToFit];
[self.view addSubview:myLabel];
}
sizeToFit
kullanmanın bazı sınırlamalar Merkez veya sağa hizalı metin ile devreye girer. Ne olacağını burada
// myLabel.textAlignment = NSTextAlignmentRight;
myLabel.textAlignment = NSTextAlignmentCenter;
[myLabel setNumberOfLines:0];
[myLabel sizeToFit];
Etiketi hala sol üst köşesinde sabit bir büyüklükte. Bir değişken orijinal etiket genişliği kaydetmek ve sizeToFit
, sonra ayarlayın veya bu sorunlarla mücadele için sabit bir genişlik ver
myLabel.textAlignment = NSTextAlignmentCenter;
[myLabel setNumberOfLines:0];
[myLabel sizeToFit];
CGRect myFrame = myLabel.frame;
// Resize the frame's width to 280 (320 - margins)
// width could also be myOriginalLabelFrame.size.width
myFrame = CGRectMake(myFrame.origin.x, myFrame.origin.y, 280, myFrame.size.height);
myLabel.frame = myFrame;
sizeToFit
ilk etiketin minimum genişlik saygı göstereceğini unutmayın. Eğer bir etiket 100 geniş ve sizeToFit
çağrı ile başlar, 100 (veya biraz daha az) (muhtemelen çok uzun bir arka etiket genişliği verecektir. İstediğiniz minimum genişlik için etiket ayarlamak için yeniden boyutlandırma önce isteyebilirsiniz.
Not diğer şeyler:
Olsun lineBreakMode
set nasıl bağlı saygı duyulur. NSLineBreakByTruncatingTail
(varsayılan) diğer iki kesme modu (baş ve orta) sizeToFit
, sonra göz ardı edilir. NSLineBreakByClipping
de göz ardı edilir. NSLineBreakByCharWrapping
Her zamanki gibi çalışır. Çerçeve genişliği hala en sağdaki harfi harfine uyacak şekilde daralmış.
Mark Amery Uçlar için bir düzeltme verdi ve yorum kullanarak Otomatik Düzen Şeritleri:
Eğer etiketiniz yer alan bir kalem ucu ya da film şeridi gibi bir küme olan
view
bir ViewController kullanan otomatik düzen, sonra da sizin koyaraksizeToFit
aramaviewDidLoad
işe yaramaz, çünkü otomatik düzen boyutları ve pozisyonları subviews sonraviewDidLoad
denir ve derhal geri etkilerisizeToFit
Ara. Ancak, içinden *30 arama* 31**iş.
(Gelecek kuşaklar/referans için) benim Orijinal Cevap:
Bu sizeWithFont:constrainedToSize:lineBreakMode:
çerçeve yüksekliği bir dize sığdırmak için gerekli hesaplamak için NSString
yöntemi kullanır, kökeni ve genişliğini ayarlar.
Etiket eklemek istediğiniz metni kullanarak çerçeveyi yeniden boyutlandırmak. Bu şekilde hatları herhangi bir sayıda ağırlayacak.
CGSize maximumSize = CGSizeMake(300, 9999);
NSString *dateString = @"The date today is January 1st, 1999";
UIFont *dateFont = [UIFont fontWithName:@"Helvetica" size:14];
CGSize dateStringSize = [dateString sizeWithFont:dateFont
constrainedToSize:maximumSize
lineBreakMode:self.dateLabel.lineBreakMode];
CGRect dateFrame = CGRectMake(10, 10, 300, dateStringSize.height);
self.dateLabel.frame = dateFrame;
Bu sayfa aynı çözüm için farklı bir kod vardır:
Ekransız-yüksekliği sabit giriş alanı ...
CSS dikey hizalama metin içinde li...
Bir Div içinde dikey Hizalama...
bir div elemanların dikey hizalama...
Nasıl bootstrap konteyner dikey hizala...