2012-06-28 12 views
8

i chcesz zmienić UITextView programowo z ilością tekstu ustawić i mam problem, jeśli dodać do UITextView z interfejsu konstruktora i zrobić to:zmiana UITextView wysokość programowo z tekstem

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

wszystkie prace w porządku, ale jeśli mogę utworzyć UITextView programowo, wysokość nie zmieni, to zrobić:

UITextView *textViewA1 = [[UITextView alloc] initWithFrame:CGRectMake(5, 5, 320, 50)]; 
[textViewA1 setFont:[UIFont fontWithName:@"Enriqueta" size:15]]; 
[textViewA1 setScrollEnabled:NO]; 
[textViewA1 setUserInteractionEnabled:NO]; 
[textViewA1 setBackgroundColor:[UIColor clearColor]]; 
[textViewA1 setText:@"A lot of text"]; 
CGRect frame = textViewA1.frame; 
frame.size.height = textViewA1.contentSize.height; 
textViewA1.frame = frame; 

w ten sposób wielkość wysokość UITextView nie zmieniają się, w jaki sposób mogę to zrobić?

Odpowiedz

9

myślę, że trzeba zrobić:

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

po addSubview:

[self.view addSubview: self.textView]; 
+0

Doskonałe dzięki :) – Supertecnoboff

+0

u r świetny koleś ... –

0

Trzeba obliczyć wielkość ramki dla tekstu masz, na przykład:

UIFont *font = [UIFont fontWithName:@"Enriqueta" size:15]; 
NSString *text = @"A lot of text"; 
CGSize frameSize = [text sizeWithFont:font]; 
CGRect originalFrame = textViewA1.frame; 
textViewA1.frame = CGRectMake(CGRectGetMinX(originalFrame), CGRectGetMinY(originalFrame), frameSize.width, frameSize.height); 

Aby zapobiec jego przekroczeniu szczególności wysokość, przeznaczenie:

CGFloat maxHeight = 100; // or something 
CGSize frameSize = [text sizeWithFont:font constrainedToSize:maxHeight]; 
+0

Aby constrainedSize dać mnie ten błąd: Wysyłanie "CGFloat" (a ka 'float') do parametru niekompatybilnego typu "CGSize" (inaczej "struct CGSize"); , i mam inne pytanie, w jaki sposób mogę ograniczyć tylko szerokość? – Piero

+0

Po prostu użyj NAPRAWDĘ dużej liczby dla parametru wysokości w procedurze constrainedToSize. Daj mu znaną szerokość statyczną i naprawdę dużą liczbę na wysokość. Metoda zwróci rzeczywisty wymagany rozmiar !!! To się nie powiedzie, ponieważ ta funkcja przyjmuje CGSize. – trumpetlicks

+0

@Piero - Aby naprawić błąd "Wysyłanie" CGFloat 'do parametru niekompatybilnego ... "spróbuj tego' CGSize maxSize = CGSizeMake (100, 100); 'zamiast' CGFloat maxHeight = 100'. – pasawaya

0

Spróbuj kod

UIFont * font = [UIFont fontWithName:@"Enriqueta" size:15]; 
textViewA1.font = font; 
NSString * theText = @"A lot of text"; 
CGSize theStringSize = [theText sizeWithFont:font constrainedToSize:CGSizeMake(190, 1000000) lineBreakMode:UILineBreakModeWordWrap]; 
CGRect frame = textViewA1.frame; 
frame.size.height = theStringSize.height; 
textViewA1.frame = frame; 

To oczywiście ma statyczną szerokość 190 pikseli dla textview. Oczywiście możesz to zmienić !!!

10

Wystarczy wysłać wiadomość sizeToFit do UITextView. Dostosuje swoją wysokość tak, aby pasowała do jej tekstu. Nie zmieni swojej własnej szerokości ani pochodzenia.

[textViewA1 sizeToFit]; 
+1

To faktycznie może zmienić szerokość. W dużym stopniu zależy to od widoku nadrzędnego i atrybutów rozmiaru innych subviews rodzica. Jest to bardzo "zależny" przypadek użycia !!! Dobra odpowiedź :-) – trumpetlicks

+0

Proszę opisać scenariusz (inny niż przy użyciu pionowego układu tekstu), w którym 'UITextView' zmieni szerokość w odpowiedzi na" sizeToFit ". Nie znalazłem go w moich testach. –

+0

Jeśli szerokość początkowo przypisana do textView jest mniejsza niż szerokość elementu nadrzędnego i nie ma niczego obok niego w lewo lub w prawo, może zwiększyć szerokość, aby wypełnić szerokość elementu nadrzędnego. JEŚLI to NIE jest poprawne, a masz dowód, naprawdę chciałbym go zobaczyć, ponieważ może to uprościć fragmenty kodu, które mam :-) Dziękuję za wszelkie informacje. – trumpetlicks

-2

przewijać UITextView po dodaniu wielu linii w TextView

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView 
{ 
    CGRect frameTextView = textView.frame; 
    frameTextView.height -= KEY_BOARD_HEIGHT; 
    textView.frame = frameTextView; 
} 
- (BOOL)textViewShouldEndEditing:(UITextView *)textView; 
{ 
    CGRect frameTextView = textView.frame; 
    frameTextView.height += KEY_BOARD_HEIGHT; 
    textView.frame = frameTextView; 
} 
+0

nie, co zadaje pytanie – Efren

Powiązane problemy