UIScrollView Inhalte Abstände nicht arbeiten für Tastatur Höhe

Ich versuche eine UIScrollView wenn die Tastatur verbirgt sich ein UITextField durch das ändern der Größe mithilfe der contentInsets wie es gezeigt wird.

Jedoch, das es nicht für die Tastatur Höhe. Die Tastatur Höhe kommt wie 216, aber es hält scrollen an die richtige Stelle wenn ich den unteren Rand, 515 für iPhone portrait-Modus und 310 für iPhone landscape-Modus. Warum würde diese Dimensionen so anders sein? Ich will nicht hartcodieren diese willkürliche Werte.

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.frame = self.parentViewController.view.frame;

    [self.textView becomeFirstResponder];

    NSLog(@"scrollview: %f,%f, parent: %f,%f", self.view.frame.size.height, self.view.frame.size.width, self.parentViewController.view.frame.size.height, self.parentViewController.view.frame.size.width);

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWasShown:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillHide:)
                                             name:UIKeyboardWillHideNotification
                                           object:nil];
}

- (void)keyboardWasShown:(NSNotification *)notification
{
    if([[UIDevice currentDevice]userInterfaceIdiom]==UIUserInterfaceIdiomPhone) {

        //Step 1: Get the size of the keyboard.
        CGFloat keyboardHeight = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size.height;

        //Step 2: Adjust the bottom content inset of your scroll view by the keyboard height.
        UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardHeight, 0.0);
        ((UIScrollView*)self.view).contentInset = contentInsets;
        ((UIScrollView*)self.view).scrollIndicatorInsets = contentInsets;

        //Step 3: Scroll the target text field into view.
        CGRect aRect = self.view.frame;
        aRect.size.height = aRect.size.height - keyboardHeight;
        if (!CGRectContainsPoint(aRect, self.textView.frame.origin) ) {
            CGPoint scrollPoint = CGPointMake(0.0, self.textView.frame.origin.y - keyboardHeight);
            [((UIScrollView*)self.view) setContentOffset:scrollPoint animated:YES];
        }
    }
}

- (void) keyboardWillHide:(NSNotification *)notification {
    UIEdgeInsets contentInsets = UIEdgeInsetsZero;
    ((UIScrollView*)self.view).contentInset = contentInsets;
    ((UIScrollView*)self.view).scrollIndicatorInsets = contentInsets;
}

Edit:

Bevor die Tastatur geöffnet ist, Drucke ich diese aus:

NSLog(@"scrollview: %f,%f, parent: %f,%f", self.view.frame.size.height, self.view.frame.size.width, self.parentViewController.view.frame.size.height, self.parentViewController.view.frame.size.width);

und es gibt diese:

scrollview: 431.000000,320.000000, parent: 431.000000,320.000000
  • ist ist das scrollen gut ohne Tastatur, könnte es möglich sein, die Sie gegeben haben, die Höhe größer als die Höhe der übergeordneten Ansicht.
  • Yep. Es ist fein scrolling
  • ich möchte wissen, ist der Rahmen der scrollview und übergeordneten Ansicht-Rahmen vor dem öffnen der Tastatur.
  • Das UIScrollView ist innerhalb eines UITabBarController. Bitte siehe meine edits.
  • im code selbst.Ansicht Art der scrollview?
  • Ja. [self.Ansicht isKindOfClass:[UIScrollView class]]; gibt JA
  • kannst du den code, weil von hier aus alles scheint in Ordnung zu sein.
  • Ich habe alle relevanten code aus der ViewController.
  • schreiben Sie diese zwei Zeilen selbst.Blick.frame = self.parentViewController.Blick.Rahmen; [self.textView becomeFirstResponder];in viewDidAppear statt ViewDidLoad
  • Das schien nicht zu arbeiten.
  • Kristin werfen Sie einen Blick auf UIScrollView's contentSize Eigenschaft. Wenn contentSize.height ist nicht groß genug, ändern contentInsets allein könnte nicht genug sein. Das heißt, das hinzufügen / entfernen der Tastatur die Höhe der scrollview ist contentSize.height
  • Ich fügte hinzu, sv.contentSize = CGSizeMake(sv.contentSize.Breite, sv.contentSize.Höhe - keyboardHeight); (wo sv ist der uiscrollview) und es funktioniert immer noch nicht 🙁
  • Ich habe auch Probleme mit UIScrollView und content-Einsätze und ich fand heraus, dass es ist mit auto-layout". Wenn ich deaktivieren Sie "auto-layout" in der xib-Datei, verschwindet das problem. Ich weiß nicht mehr, in dieser Zeit, aber vielleicht hilft es, finden Sie die Quelle des Problems.

InformationsquelleAutor kb_ | 2013-05-23
Schreibe einen Kommentar