2010-01-27 14 views
11

Yığın Taşması ve Google'da çok sayıda arama yaptım, ancak sorunuma bir çözüm bulamadım.Otomatikleştir UITextView ve UIScrollView

UIScrollView ve birkaç alt görünümü (UIImageView, UILabel, UITextView) içeren bir ürün için Ayrıntı Görünümüm var. Bir örnek here bulabilirsiniz.

Önce UITextView (metnin kendisi değil) otomatik olarak ilgili yüksekliğe otomatikleştirmek istiyorum. Sonra UIScrollView'in tamamını otomatikleştirmek istiyorum, böylece UITextView'imin ve onun üzerindeki öğelerin yüksekliğine uyuyor. Aşağıdaki kodu denedim:

myUITextView.frame = CGRectMake(2.0, 98.0, 316.0, self.view.bounds.size.height); 

[scrollView setContentOffset:CGPointMake(0.0, 0.0) animated:NO]; 
scrollView.contentSize = CGSizeMake(320.0, 98.0 + [myUITextView frame].size.height); 

[self.view addSubview:scrollView]; 

98,0 + [myUITextView çerçeve] .size.height) çünkü benim düşünce vardı: myUITextView yüksekliğini aldıktan sonra diğer subviews yüksekliğini (98.0 ekleyin) ona.

Maalesef çok iyi çalışmıyor. UIScrollView içeriğine bağlı olarak, çok kısa veya çok uzun. I UITextView yüksekliği her zaman aynıdır ve sonuç olarak bazı günlük yaptı:

2010-01-27 14: 15: 45,096 myApp [1362: 207] [myUITextView çerçeve] .size.height: 367,000000

Teşekkürler!

cevap

0

Bir UITextView, kendisini otomatik olarak yeniden boyutlandırmayacaktır (zaten bildiğim kadarıyla değil), böylece metnin boyutunu kendiniz almanız ve UIView'i buna göre boyutlandırmanız gerekir. this page üzerinde

fonksiyonları yardımcı olacaktır - Bir dize genişliğini ve yüksekliğini almak için kullanabilirsiniz,

// Get the size that the string will render at 
NSString *contents = @"This is the content of your UITextView"; 
CGSize areaSize = [contents sizeWithFont:myView.font forWidth:myView.frame.size.width lineBreakMode:UILineBreakModeWordWrap]; 

// Then set the frame of your UITextView to be the right size 
myView.bounds = CGRectMake(0, 0, areaSize.width, areaSize.height); 

gibi bir şey Ardından, etrafında diğer bileşenleri koyabiliriz. Bu yardımcı olur

Umut,

S

PS Uyarı, dokümanlarına link doğrudur ama benim kod örneği üzgün :)

+0

'a eşittir. Yardımlarınız için teşekkürler. BoyutWithFont gibi görünüyor: forWidth: lineBreakMode: yalnızca tek bir metin satırı için çalışır. SizeWithFont denedim: constrainedToSize: lineBreakMode: ve işe yarıyor. Bazen doğru yüksekliği hesaplamaz. Sanırım metin kaynağımdaki bazı satır sonları nedeniyle düğmeye 30 px ekledim. – dennis3484

+0

Sadece belgeleri kontrol ettim ve kesinlikle haklısın, bunun için üzgünüm! Ben de bazen yanlış yükseklikte dönen sorunları vardı ve ben yaptım aynı çözümü kullandım - 30px ekle :) – deanWombourne

22

aslında yapmak çok kolay bir yolu yoktur, denenmemiş olduğu contentSize kullanarak UITextView öğesini doğru yüksekliğe yeniden boyutlandırın. Unutulmaması gereken

CGRect frame = _textView.frame; 
frame.size.height = _textView.contentSize.height; 
_textView.frame = frame; 

Bir şey UITextView addSubview ile görünümüne eklendi yalnızca sonra doğru contentSize olmasıdır. Bundan önce frame.size

+0

bir çekicilik gibi çalışır – Krystian