UITableViewCell
'da dışlama yolları olan bir TextView'im varsa, verilen bir dizenin hücresinin yüksekliğini nasıl hesaplayabilirim?Dışlama yolları olan TextView için hücre yüksekliğini hesapla
7
A
cevap
17
Başkalarına yardımcı olabileceğini düşündüğüm bir çözüm buldum. Yeni bir NSTextContainer, NSLayoutManager ve NSTextStorage nesnesinin oluşturulmasını gerektirmediğinden, zaten UITextView'ın bir parçası olarak başlatıldı, bunun daha verimli olacağından şüpheleniyorum.
dışlamaları yolları ve NSAttributedString kullanan bir UITextView boyutunu hesaplamak için, bir aşağıdakileri yapabilirsiniz:// Assuming something like this...
UIBezierPath * exclusionPath = [UIBezierPath bezierPathWithRect:someRect];
self.textView.textContainer.exclusionPaths = @[exclusionPath];
NSAttributedString * attributedString = ...
self.textView.attributedString = attributedString;
...
// Use text container, layout manager, and text storage associated with the text view.
NSTextContainer * textContainer = self.textView.textContainer;
NSLayoutManager * layoutManager = textContainer.layoutManager;
NSTextStorage * textStorage = layoutManager.textStorage;
// Limit the width or height. In this case, limiting the width to 280.
textContainer.size = CGSizeMake(280.0, FLT_MAX);
[textStorage setAttributedString:attributedString];
// Because the layout manager performs layout lazily, on demand, you must force it to lay out the text, even though you don’t need the glyph range returned by this function.
[layoutManager glyphRangeForTextContainer:textContainer];
// Ask the layout manager for the height of the rectangle occupied by the laid-out text
CGFloat height = [layoutManager usedRectForTextContainer:textContainer].size.height;
3
Aslında textContainer
ve layoutManager
oynamak gerekmez. Bu benim için çalışıyor.
UIBezierPath *exclusionPath = [UIBezierPath bezierPathWithRect:imageViewFrame];
UITextView *tempTextView = [[UITextView alloc] init];
[tempTextView setFont:font];
tempTextView.textContainer.exclusionPaths = @[exclusionPath];
[tempTextView.textStorage replaceCharactersInRange:NSMakeRange(0, [tempTextView.text length]) withString:text];
CGRect textViewFrame = [tempTextView frame];
textViewFrame.size.height = [tempTextView sizeThatFits:CGSizeMake(290, FLT_MAX)].height;
return textViewFrame.size.height;
İlgili konular
- 1. UITableView kaydırırken hücre yüksekliğini değiştirme
- 2. php_excel07- Hücre verisine dayanarak hücre yüksekliğini nasıl büyütür (xls)
- 3. Tam hücre yüksekliğini işgal etmek için div alma
- 4. C# kullanarak FLV ve SWF'nin genişliğini ve yüksekliğini hesapla C#
- 5. Görüntü Oranı ve Genişlik Tabanlı Görüntü/Video Yüksekliğini Hesapla
- 6. IOS8 - Klavye açıldığında veya kapatıldığında görünen ekran yüksekliğini hesapla
- 7. regexp dışlama
- 8. UITextView textContainer dışlama yolu, textContainer
- 9. Hücre yüksekliğini ve alt görünümü yüksekliğini aynı anda animasyonla nasıl artırırsınız?
- 10. İçerik boyutuna ayarlamak için UICollectionView yüksekliğini otomatikleştirme
- 11. IOS - Çizilmeden önce TextView yüksekliğini hesaplamak mümkün mü
- 12. Harici tepki yolları olan Meteor.startup bileşeni
- 13. Her grup için sıraları hesapla
- 14. Maven3 küresel bağımlılık dışlama
- 15. C# Toplam dışlama
- 16. Metin boyutunu metin alanına göre hesapla
- 17. Yolları
- 18. dışlama erişimi ve sistem çağrısı
- 19. dışlama Yolcu veya Mongrel'ı aracılığıyla
- 20. Yolları
- 21. Kod biçimlendirmeden kod bölümünü dışlama
- 22. İşlemci verileri için maksimum boyutu hesapla
- 23. TextView için kenarlıklı dalgaların mı?
- 24. TextView için ColorStateList nasıl tanımlanır?
- 25. nasıl textview ve android için
- 26. Çizgisel matris cumsum vektöründen hesapla
- 27. OpenLayers Küme Yeniden Hesapla
- 28. Sabit GridView Satır Yüksekliğini Ayarla
- 29. Arka plan Rengi, hücre ile olan farka göre farklılık gösterir
- 30. Grup Verilerinin Varyansını Hesapla
Neredeyse mükemmel çalışıyor. Düzgün çalışmak için +1'e eklemek zorundaydım, nedenini bilmiyorum :) –