2013-11-06 2 views
0

У меня есть 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 Бары
  • "": Под непрозрачными барами

Итак, что происходит с моим взглядом? Спасибо за помощь.

ответ

0

Как всегда, речь идет о том, как добавляются наблюдатели: Их не следует добавлять в метод viewDidLoad, но в viewWillAppear. Теперь это исправлено.

Смежные вопросы