У меня есть DetailViewController с нижней панелью инструментов.После UI Segue искажает рамку моего представления
Эта панель инструментов имеет UIButtons, а также объекты UITextField.
Для того, чтобы иметь это UITextFields видно во время редактирования, я использую следующие процедуры:
- (void) returnMainViewToInitialposition:(NSNotification*)aNotification{
[self scrollViewForKeyboard:aNotification up:NO];
}
- (void) scrollViewForKeyboard:(NSNotification*)aNotification up:(BOOL) up{
if (_detailItem && (self.addressTextField.editing || self.urlTextField.editing || self.titleTextField.editing)) {
NSDictionary* userInfo = [aNotification userInfo];
// Get animation info from userInfo
NSTimeInterval animationDuration;
UIViewAnimationCurve animationCurve;
CGRect keyboardFrame;
[[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardFrame];
CGFloat _keyboardHeight = ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) ? keyboardFrame.size.height : keyboardFrame.size.width;
// Animate up or down
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:animationDuration];
[UIView setAnimationCurve:animationCurve];
[self.view setFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + _keyboardHeight * (up?-1:1), self.view.frame.size.width, self.view.frame.size.height)];
[UIView commitAnimations];
NSLog(@"detailView bounds: %.0f, (%.0f + %.0f x %d), %3.0f, %3.0f", self.view.frame.origin.x, self.view.frame.origin.y + _keyboardHeight * (up?-1:1), _keyboardHeight, (up?-1:1), self.view.frame.size.width, self.view.frame.size.height);
}
}
+ (CGRect) convertRect:(CGRect)rect toView:(UIView *)view {
UIWindow *window = [view isKindOfClass:[UIWindow class]] ? (UIWindow *) view : [view window];
return [view convertRect:[window convertRect:rect fromWindow:nil] fromView:nil];
}
Он работает, пока я не толкать другой вид сверху текущего вида, а затем вставьте его обратно. Тогда я не вижу свой UITextField при их редактировании.
Вот что NSLog выше говорят:
Перед нажатием (работы):
detailView bounds: 0, (-704 + 352 x -1), 703, 768
После выскакивают (не):
detailView bounds: 0, (352 + 352 x 1), 703, 768
Так это кажется, мой UIViewController теряет self.view.frame.origin.y
между push/pops ...
В IB все размеры обоих видов (detailView и pushedView) установлены на «inferred». Следующие параметры также проверяются одинаково для обоих видов:
- Adjust Scroll View вставках
- Скрыть Bottom Bar на Пуш
- Продлить Ребра: Под Top Бары
- "": Под Bottom Бары
- "": Под непрозрачными барами
Итак, что происходит с моим взглядом? Спасибо за помощь.