2016-03-23 23 views
0

UILabel'imin yüksekliğini yakalamaya çalışıyorum, böylece hücrenin yüksekliğini dinamik olarak ayarlayabilirim, ancak hiçbir zaman doğru yüksekliğe geri dönmez ve içeriğim her zaman kesik ve elipslerle eklenir.UILabel'ın yüksekliğim geri dönüşü asla doğru değil

Kodum:

let height = String(page.valueForKey(subject)).heightWithConstrainedWidth(self.view.frame.width - 30, font: UIFont.systemFontOfSize(16.0)) 

// and at the bottom of my class.. 

// Custom functions 
extension String { 
    func heightWithConstrainedWidth(width: CGFloat, font: UIFont) -> CGFloat { 
     let constraintRect = CGSize(width: width, height: CGFloat.max) 
     let boundingBox = self.boundingRectWithSize(constraintRect, options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil) 
     return boundingBox.height 
    } 
} 

nispeten geniş dinamik sayıda çeşit döndürür, ancak sayı her zaman kısa ve asla doğru olduğu için kesinlikle bir yiğit girişim yapar.

Yüksekliği nasıl ayıklandığım konusunda göze batmayan bir şey var mı? Bunu gerçekleştirmenin daha iyi bir yolu var mı?

cevap

1

Kodunuz ne demek için gayet ..

// Custom functions 
extension String { 
    func heightWithConstrainedWidth(width: CGFloat, font: UIFont) -> CGFloat { 
     let label:UILabel = UILabel(frame: CGRectMake(0,0,width, CGFloat.max)) 
     label.numberOfLines = 0 
     label.lineBreakMode = .ByWordWrapping 
     label.font = font 
     label.text = self 
     label.sizeToFit() 
     return label.frame.height 
    } 
} 

Ama yine de yeterince büyük değil: Matt tepki Başına


, ben böylece etiket ölçmek için güncellendi. Sorun sadece bir etiketin bir dize olmamasıdır. Bir dizginin yüksekliğini buluyorsunuz. Yapmak istediğin bu değil. Bir etiketin yüksekliğini bulmak istersiniz! Sonuçta, bir UILabel’a, içerdiği dizgeden daha fazlası var. UILabel dizeden daha uzun. Bunu hesaba katmıyorsun.

+0

Salutations! Bu çok büyük bir anlam ifade ediyor. 'CellForRowAtIndexPath' (UILabel'imi başlattığım) 'ın * heightForRowAtIndexPath'dan sonra çağrıldığı izlenimindeyim .. Sadece bir UILabel'ı ölçmek için kullanmamayı tercih ederim, sonra asla kullanmayın ve daha sonra yeniden oluşturun . CellForRowAtIndexPath işlevinin son sonucunu 'heightForRowAtIndexPath 'yöntemine göndermenin bir yolu var mı? UILabel içinde dize boyutunu döndürmek için '' 'string '' 'ı güncelleyebildiğim sanırım .. – Trip

+0

Aslında, içerdiği etiketine göre bir hücreyi nasıl boyutlandıracağınızı bilmemek gerçekten sorun mu? Belki de sorman gereken budur! – matt

+0

Yeterince adil. Yardımın için teşekkür ederim efendim. – Trip

İlgili konular