2017-01-23 10 views
0

Dies ist meine erste Frage und ich bin ganz neu in der Codierung.UIScrollView xcode 8 swift 3

Ich erstelle eine App und eine der Seiten hat ein Formular für einen Benutzer mit zwei Etiketten, zwei Textfelder, einen Schalter und eine Schaltfläche "Senden" ausfüllen.

Bei kleineren Bildschirmgrößen verschwanden einige Elemente, also habe ich eine Stapelansicht verwendet, aber wenn die Tastatur hochkommt, blockiert sie das Textfeld, was für den Benutzer sicherlich ärgerlich sein wird.

Ich habe ein paar Tutorials über das Hinzufügen von Scrollviews gesehen, aber die Höhe so einzustellen, dass alles für kleinste Geräte gut passt, hinterlässt bei großen Bildschirmen einen unbequem großen leeren Bereich.

Gibt es eine Möglichkeit, die Bildlaufansicht nur dann zu aktivieren, wenn sie benötigt wird? Ist das, wofür "Dynamik" ist?

+0

"Gibt es eine Möglichkeit, die Bildlaufansicht nur dann zu aktivieren, wenn sie benötigt wird?" Das ist das Standardverhalten. Es scrollt nur, wenn sein Inhalt größer als seine Ansicht ist. Check out [Tutorials] (http://www.ios-blog.co.uk/tutorials/objective-c/uitextfield-move-up-when-keyboard-present/). – shallowThought

Antwort

0

Dies ist, was aus Bewegen des Scroll in Bezug auf die für mich arbeiteten am Ende und aus dem Weg, wenn der Textview ausgewählt wurde und die Tastatur aktiviert.

func textViewDidBeginEditing(_ textView: UITextView) { 
    scrollView.setContentOffset(CGPoint(x: 0, y: 50), animated: true) 
} 

** Der Wert von 50 war genau das, was für mein Layout funktionierte ... diese Zahl könnte für Sie anders sein.

ich auch in setzen:

func textViewDidEndEditing(_ textView: UITextView) { 
     scrollView.setContentOffset(CGPoint(x: 0, y: 0), animated: true) 
} 

...so dass die Scrollview nach der Bearbeitung des Benutzers wieder normal war.

0

Wenn das Problem bei der Formatierung der Benutzeroberfläche auf unterschiedlich großen Bildschirmen auftritt, ist das automatische Layout eine integrierte Funktion in xcode, die dieses Problem löst. Durch das Hinzufügen von Beschränkungen zu Ihren Ansichten wird die automatische Größenanpassung Ihr Bestes geben, um die Größe Ihrer UI-Elemente zu ändern, sodass das, was Sie im Storyboard sehen, auf allen Geräten angezeigt wird. Mit dieser Technik können Sie möglicherweise einen Scrollview ganz vermeiden. Versuchen Sie, alle Ihre Ansichten auszuwählen, und gehen Sie dann zu Editor -> Auto Layout-Probleme auflösen -> Auf vorgeschlagene Einschränkungen zurücksetzen und sehen Sie, ob das funktioniert.

+0

Dalton, danke für die Antwort. Ich habe versucht, was Sie vorgeschlagen haben, aber je kleiner die Bildschirmgröße, desto mehr Assets verschwanden. Von oben nach unten habe ich: Label mit Kurzanleitung, Stack-Ansicht mit Betreff-Label und Textfeld, Stack-Ansicht mit Message-Label und textVIEW, horizontale Stack-Ansicht mit Schalter und "make anonyme" Label, "send" -Button. Vielleicht sollte ich sie alle in eine allumfassende Stapelansicht bringen? – ChrisK

0

Scheint, dass Sie zwei Fragen haben. Der erste ist "Für kleinere Bildschirmgrößen verschwanden einige Elemente". Dieser wird von @ Dalton Sweeney beantwortet. Verwenden Sie Auto Layout dann Zurücksetzen auf Empfohlene Einschränkungen

Ich werde Ihre zweite Frage beantworten, was Sie tun sollen, wenn die Tastatur einige UIElemnts abdeckt.

Sie müssen den View-Controller nicht ändern. Sie sollten den Frame der Ansicht dynamisch ändern, wenn die Tastatur ausgeblendet wird. Ich habe eine Demo in GitHub, die Vollversion, wenn Sie wollen: https://github.com/EricZhang90/IOS_Demo/tree/master/KeyboadDemo

Der Haupt Workflow folgt:

1) zwei Benachrichtigungen erstellen, die Tastatur zu erkennen ist etwa/verstecken erscheinen:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSNotificationCenter *ctr = [NSNotificationCenter defaultCenter]; 

    [ctr addObserver:self 
     selector:@selector(moveKeyboardInResponseToWillShowNotification:) 
     name:UIKeyboardWillShowNotification 
     object:nil]; 

    [ctr addObserver:self 
     selector:@selector(moveKeyboardInResponseToWillHideNotification:) 
     name:UIKeyboardWillHideNotification 
     object:nil]; 

} 

2) Rahmen der Ansicht anpassen

Die Methode verwendet zwei Parameter: Der erste ist die Tastaturinformation, die vom Benachrichtigungszentrum gesendet wird. Sie können es von der Methode im ersten Schritt erhalten. Der zweite Parameter zeigt an, dass diese Anpassung den Rahmen verkleinert oder erweitert. Sein Wert ist 0, wenn sich die Tastatur im Begriff ist zu verbergen, und ist der Rahmen der Tastatur, wenn die Tastatur erscheint.

-(void)adjustView: (NSDictionary *)info :(CGRect)rect{ 

    // get duration of keyboard appears/hides 
    CGFloat duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]; 
    // get keyboard's curve 
    UIViewAnimationCurve curve = [[info objectForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue]; 
    [self.view layoutSubviews]; 

    // Start to adjust frame: 
    // Animate: 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:duration]; 
    [UIView setAnimationCurve:curve]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 

    // self.buttonLayoutConstraint is the layout constraint between bottom of view and bottom of screen(super view). 
    // This is the most important part. 
    self.buttonLayoutConstraint.constant = rect.size.height; 
    [self.view layoutSubviews]; 
    [UIView commitAnimations]; 
} 
Verwandte Themen