2014-11-25 3 views
0

В моем приложении в один момент я хотел бы, чтобы переместить кнопку вверх, если клавиатура появляется, так что кнопка всех дней видна, и переместить его обратно, когда клавиатура уволит:Поведение тренажера отличается от поведения устройства?

- (void) keyboardDismiss :(NSNotification*)notification{ 
    NSDictionary* keyboardInfo = [notification userInfo]; 
    NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey]; 
    CGRect keyboardFrameBeginRect = [keyboardFrameBegin CGRectValue]; 
    UIView animateWithDuration:0.4 animations:^{ 
     footer.frame = CGRectMake(X(footer), Y(footer)+keyboardFrameBeginRect.size.height-10, WIDTH(footer), HEIGHT(footer)); 
    }]; 
} 

- (void) keyboardShow:(NSNotification*)notification{ 
    NSDictionary* keyboardInfo = [notification userInfo]; 
    NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey]; 
    CGRect keyboardFrameBeginRect = [keyboardFrameBegin CGRectValue]; 
    [UIView animateWithDuration:0.4 animations:^{ 
     footer.frame = CGRectMake(X(footer), Y(footer)-keyboardFrameBeginRect.size.height+10, WIDTH(footer), HEIGHT(footer)); 
    }]; 
} 

Поэтому я модифицируя y Координата keyboardFrameBeginRect.size.height-10 всегда. Я бы ожидал, что код должен вести себя одинаково как на симуляторе, так и на самом устройстве. Он был протестирован на iPhone 4 и работал, как ожидалось. Он был протестирован в симуляторе на iPhone 5 и работает так, как ожидалось, теперь интересная часть: когда я разворачиваю код через testflight, после вызова keyboardDismiss:footer больше не виден (проверен на iPad2 и iPhone 5s, и проблема только с iPhone). То, что я сделал, это добавить оповещение прямо перед тем, как keyboardDismiss: вернет, что будет печатать координату yfooter, результаты 446 в симуляторе и 506 в версии устройства (iPhone 5s). Что может быть причиной разных результатов?

изменения:

footer инициализации: CGRectMake((kWidth - kHSeparator - kButtonSize), (kHeight - kVSeparator- kButtonSize), kButtonSize, kButtonSize), где kWidth и kHeight являются ширина и высота экрана, другие просто константы.

+0

Вы можете добавить код для расчета нижнего колонтитула? И это точно 446 и 506. Не 442 и 506. –

+0

Что значит «рассчитать», я просто вывод 'footer.origin.y' –

+0

Что такое нижний колонтитул? вид внизу, когда вы начинаете его, у него есть footer.frame = CGRectMake (0, self.view.bounds.size.heigh-70, .... Это только для информации о нижнем колонтитуле. –

ответ

0

Что бы я ожидал, так это то, что код должен вести себя одинаково как на симуляторе, так и на самом устройстве.

В целом, это безопасное предположение. Но различия между симулятором и устройством - это факт жизни с разработкой iOS, и важно выполнить фактическое тестирование устройства, чтобы найти такие проблемы.

Но я бы предположил, что вы захотите использовать UIKeyboardFrameEndUserInfoKey вместо UIKeyboardFrameBeginUserInfoKey, если хотите переместить представление в новую позицию, основанную на размере клавиатуры.

+0

Вы не отвечаете на мой вопрос. –

+0

Использование «UIKeyboardFrameEndUserInfoKey» вместо «UIKeyboardFrameBeginUserInfoKey» было ответ. что не работает? –

+0

Нет, это не так. –

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