Próbuję przenieść UIScrollView
, gdy klawiatura ukrywa UITextField
, zmieniając rozmiar za pomocą contentInsets
, jak pokazano.Składniki zawartości UIScrollView nie działają dla Wysokość klawiatury
Nie działa jednak dla wysokości klawiatury. Wysokość klawiatury wynosi 216, ale zatrzymuje się tylko przewijanie w prawidłowej lokalizacji, jeśli ustawię dolną wstawkę na 515 dla trybu pionowego iPhone'a i 310 dla trybu poziomego iPhone'a. Dlaczego te wymiary byłyby tak różne? Nie chcę hardcode tych arbitralnych wartości
- (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.
Przed klawiatura jest otwarty, i drukować na to uwagę:
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);
i drukuje to:
scrollview: 431.000000,320.000000, parent: 431.000000,320.000000
jest przewijanie dobrze bez klawiatury, możliwe, że podałeś wysokość większą niż wysokość widoku nadrzędnego. –
Tak. To jest przewijanie dobrze – Kristin
Chcę poznać ramkę przewijania i jego rodzica ramki widoku przed otwarciem klawiatury. –