2012-06-28 15 views
8

voglio cambiare l'UITextView a livello di codice con la quantità di testo che ho messo, e ho un problema, se aggiungo un l'UITextView con costruttore di interfaccia e faccio questo:cambiamento UITextView altezza di programmazione con il testo

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

tutti bene il lavoro, ma se creo l'UITextView a livello di codice, l'altezza non cambiano, faccio questo:

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; 

in questo modo la dimensione altezza del UITextView non cambiano, come posso fare?

risposta

9

penso che devi fare:

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

dopo l'addSubview:

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

Perfetto grazie :) – Supertecnoboff

+0

u r grande tizio ... –

0

è necessario calcolare le dimensioni del fotogramma per il testo che avete, per esempio:

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); 

per evitare che si supera una determinata altezza, uso:

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

Per constrainedSize give me questo errore: l'invio di 'CGFloat' (a ka 'float') a parametro di tipo incompatibile 'CGSize' (conosciuto anche come 'struct CGSize'); e ho un'altra domanda, come posso vincolare solo con la larghezza? – Piero

+0

Basta usare un numero veramente grande per il parametro height della routine constrainedToSize. Dagli la tua nota larghezza statica e un numero davvero grande per l'altezza. Il metodo restituirà quindi la dimensione effettiva necessaria !!! Ciò non riesce perché quella funzione accetta un CGSize. – trumpetlicks

+0

@Piero - Per correggere l'errore "Invio CGFloat" su parametri incompatibili ... "prova questo' CGSize maxSize = CGSizeMake (100, 100); 'invece di' CGFloat maxHeight = 100'. – pasawaya

0

Prova questo codice

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; 

Questo ovviamente ha una larghezza statica di 190 pixel per la visualizzazione di testo. Puoi ovviamente cambiarlo !!!

10

Basta inviare il messaggio sizeToFit allo UITextView. Regolerà la propria altezza per adattarsi al suo testo. Non cambierà la propria larghezza o origine.

[textViewA1 sizeToFit]; 
+1

In realtà è possibile modificare la larghezza. Dipende molto dalla vista genitore e dagli attributi di dimensionamento degli altri sottoview del genitore. Questo è un caso d'uso molto "dipende" !!! Buona risposta aggiunta però :-) – trumpetlicks

+0

Descrivi uno scenario (diverso dall'uso di un layout di testo verticale) in cui un 'UITextView' cambierà la sua larghezza in risposta a' sizeToFit'. Non ne ho trovato uno nei miei test. –

+0

se la larghezza inizialmente assegnata a textView è inferiore a quella del genitore e non c'è nulla accanto a sinistra o destra, può aumentare la sua larghezza per riempire la larghezza del genitore. SE questo NON è corretto, e tu hai una prova, mi piacerebbe davvero vederlo, in quanto potrebbe semplificare porzioni di codice che ho :-) Grazie per qualsiasi informazione. – trumpetlicks

-2

per scorrere UITextView quando aggiunto su più righe in 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

non è quello che chiede la domanda – Efren

Problemi correlati