#ios #cocoa-touch #ios-simulator #ios8 #xcode6
#iOS #cocoa-touch #ios-симулятор #ios8 #xcode6
Вопрос:
Мое приложение отлично работает в Xcode 5 на симуляторе iPad retina, но когда я запускаю симулятор в том же проекте с Xcode 6 на симуляторе iPad retina, этот небольшой фрагмент кода :
UIView *firstResp = [self.view findFirstResponder];
CGRect firstResponderFrame = [firstResp convertRect:firstResp.bounds toView:self.view];
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
if (firstResponderFrame.origin.y firstResponderFrame.size.height 40-self.scrollView.contentOffset.y > self.view.window.frame.size.width-kbSize.width) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.scrollView setContentOffset:CGPointMake(0, firstResponderFrame.origin.y-self.view.window.frame.size.width/2 100 firstResponderFrame.size.height/2) animated:YES];
});
}
В основном этот код выполняется при появлении клавиатуры, чтобы центрировать представление. Теперь он ведет себя очень плохо; иногда клавиатура даже не отображается.
В Xcode 6 ошибок не отображается. Метрика, похоже, такая же, как и в моем первоначальном тестировании разных фреймов. Я использую NSNotification
для клавиатуры: может быть, в этом причина?
Этот код также находится в контроллере представления внутри контроллера представления контейнера в другом VC.
На самом деле это не конкретный вопрос, но мне очень любопытно, почему это не сработает. Я работаю на iOS 7.1 в обеих версиях Xcode. Симулятор в Xcode 6 показывает iOS 8 в строке заголовка окна, но мое приложение настроено для запуска на iOS 7.1.
**
Редактировать:
** NVM .. нашел его. Я недостаточно тщательно тестировал, прежде чем спрашивать. Для тех, кому интересно, в IOS 7 была ошибка, из-за которой высота и ширина оставались неизменными, даже если ориентация изменилась, насколько мне известно, это произошло с view.window.frame и размером клавиатуры.. Похоже, эта ошибка исчезла для iOS 8.
Ответ №1:
Исправление ошибки iOS 7 для ширины и высоты в портретной ориентации — я надеюсь, что это поможет кому-нибудь в будущем при миграции на iOS8.
// Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWillShow:(NSNotification*)aNotification
{
[self UpdatePatientFromForm];
UIView *firstResp = [self.view findFirstResponder];
CGRect firstResponderFrame = [firstResp convertRect:firstResp.bounds toView:self.view];
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
//Account for iOS 7 inversion of height and width
CGFloat kbHeight = (kbSize.width>kbSize.height)? kbSize.height : kbSize.width;
CGFloat windowHeight = (self.view.window.frame.size.width>self.view.window.frame.size.height)? self.view.window.frame.size.height : self.view.window.frame.size.width;
CGFloat visibleScreenHeight = windowHeight - kbHeight;
if (firstResponderFrame.origin.y firstResponderFrame.size.height 100-self.scrollView.contentOffset.y > visibleScreenHeight) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.scrollView setContentOffset:CGPointMake(0, firstResponderFrame.origin.y-windowHeight/2 100 firstResponderFrame.size.height/2) animated:YES];
});
}
}