2016-04-08 12 views
2

Ich habe ein Problem - wenn die Tastatur zeigen, wird mein Code die View-Frame-Größe des View-Controllers so mit den Einschränkungen festlegen, werden alle Komponenten in der richtigen Position sein. Manchmal funktioniert es jedoch wie das linke Bild, aber wenn ich diesen Ansicht-Controller von bestimmten Punkten aus betrete, sieht es wie das rechte Bild aus.self.view set frame nicht funktionieren, wenn Tastatur zeigen

enter image description here

und hier ist mein Code, wenn die Tastatur angezeigt erkennen ..

- (void)moveTextViewForKeyboard:(NSNotification*)aNotification 
         up:(BOOL)up { 

NSDictionary* userInfo = [aNotification userInfo]; 
NSTimeInterval animationDuration; 
UIViewAnimationCurve animationCurve; 
CGRect keyboardEndFrame; 

[[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve]; 
[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration]; 
[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardEndFrame]; 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:animationDuration]; 
[UIView setAnimationCurve:animationCurve]; 

CGRect keyboardFrame = [self.view convertRect:keyboardEndFrame toView:nil]; 

CGRect viewFrame = self.view.frame; 
CGRect screenRect = [[UIScreen mainScreen] bounds]; 
CGFloat screenHeight = screenRect.size.height; 

if (up) { 
    viewFrame.size.height = screenHeight - (keyboardFrame.size.height) - viewFrame.origin.y; 
} else { 
    viewFrame.size.height = screenHeight; 
} 

[self.view setFrame:viewFrame]; 

[UIView commitAnimations]; 

}

ich hier schon seit Tagen gesucht haben ... haben noch kein Glück: (Gibt es einen Experten, der Ihnen helfen kann? Vielen Dank im Voraus.

Antwort

2

Wenn Sie Auto-Layout verwenden, sollten Sie den Rahmen nicht manuell setzen, wahrscheinlich wird die Schnittstelle nicht geändert oder wird wahrscheinlich Ihre Benutzeroberfläche durcheinander bringen.
Erstellen Sie einen Verweis auf eine oder mehr Einschränkungen, ihre constant Eigenschaft ändern, um die Tastatur ändert gerecht zu werden, fragt dann Automatisches Layout, um das Layout zu aktualisieren durch setNeedsLayout und -layoutIfNeeded

+0

mit Ja, das ist der richtige Weg in der Auto-Layout-Umgebung. –

+1

Vielen Dank, Andrea, es funktioniert wie du gesagt hast. Ich lerne eine Lektion. :) –